Zählschleife

Aus EINI
Wechseln zu: Navigation, Suche

Eine Zählschleife ist eine besondere Art der kopfgesteuerten Schleife. In den meisten Programmiersprachen wird sie durch das Schlüsselwort for eingeleitet und besitzt in ihrer Deklaration Informationen über Anweisungen, die bei Schleifeneintritt und bei der Fortsetzung der Schleife ausgeführt werden sollen.

Syntaxdiagramm

For statement.png

Verwendung

Der Name der for-Schleife leitet sich durch Aussagen wie z.B. "Für alle x ..." ab. Sie findet daher meistens Verwendung, wenn über Datensätze iteriert werden soll, oder wenn einfach Zahlenbereiche abgezählt werden.

In der Praxis ist die for-Schleife die häufigst verwendete Schleife, da sie alle wichtigen Informationen, die zur Semantik einer Schleife gehören, im Kopf der Schleife stehen können. So verwenden manche Programmierer sogar Konstrukte, wie for(;x>0;){...} um while-Schleifen zu emulieren.

Aufbau einer for-Schleife

Eine for-Schleife besteht, schon wie while- und do-while-Schleifen aus einem Kopf und einem Rumpf. Zwischen Schleifenkopf und Rumpf steht kein Semikolon!

Der Schleifenkopf

Das Schlüsselwort für eine for-Schleife ist das namensgebende for. Darauf folgt der Schleifenkopf mit folgendem Aussehen: ( 1. ; 2. ; 3. ).

Unter 1. sollte eine Zählvariable initialisiert werden, z.B. int i = 0;. Die hier aufgeführte Anweisung wird beim Eintritt in die Schleife ausgeführt.

Unter 2. sollte eine Bedingung für das Ausführen der Schleife stehen, z.B. i < 5. Solange dies erfüllt ist, wird die Schleife ausgeführt.

Unter 3. sollte eine Fortsetzung stehen, die als letztes im Schleifenrumpf ausgeführt wird, z.B. i++.

Zusammenfassend sieht der Schleifenkopf einer for-Schleife so aus:

for(Initialisierung ; Bedinung ; Fortsetzung)

for( int i = 0 ; i < 5 ; ++i)

Der Schleifenrumpf

Als Schleifenrumpf wird der Programmcode bezeichnet, der in der Schleife wiederholt werden soll. Wenn keine {}-Klammern gesetzt werden, wird nur der erste Befehl nach dem Schleifenkopf wiederholt. Wenn mehrere Befehle wiederholt werden sollen, dann muss auf dem Schleifenkopf ein Block mit { folgen. Nach dem letztem Befehl des Schleifenrumpfes muss der Block mit } geschlossen werden. Ein leerer Rumpf kann mit einem einzelnem Semikolon nach dem Schleifenkopf signalisiert werden.

for (...)
{
  erg = erg + 5;
  System.out.println(erg);
}

Mit jedem Schleifendurchlauf wird die Variable erg um 5 erhöht. Danach wird diese im jedem Durchlauf ausgegeben.

for (...)
  erg = erg + 5;
  System.out.println(erg);

Auch hier wird bei jedem Schleifendurchlauf die Variable erg um 5 erhöht. Jedoch wird nur diese Variable nur nach der Schleife einmal ausgegeben, da die Ausgabe nicht innerhalb der Schleife liegt. Die Einrückung der System.out.println(erg) - Zeile ist demnach auch falsch!

for (...)
  erg = erg + 5;
System.out.println(erg);
for (...);
erg = erg + 5;
System.out.println(erg);

Hier wird nun auch die Variable erg nur ein mal um 5 erhöht, da die Schleife selbst einen leeren Rumpf durch das einzelne Semikolon nach dem Schleifenkopf hat.

die (komplette) for-Schleife

for( int i = 0 ; i < 5 ; ++i)
{
  erg = erg + 5;
  System.out.println(erg)
}

Zunächst wird die Zählvariable i mit 0 initialisiert. Danach wird geprüft, ob i < 5 ist. Da dies korrekt ist, wird nun der Schleifenrumpf ausgeführt. Auf die Variable erg wird 5 aufaddiert und danach wird die Variable ausgegeben. Nun wird i auf 1 erhöht.

Der Schleifenkopf wird nun mit i = 1 ausgeführt. Die Initialisierung wird nun nicht mehr ausgeführt, da diese nur zu Beginn der Schleife ausgeführt wird. Es wird also direkt überprüft, ob i < 5 ist. 1 < 5 ist korrekt, der Schleifenrumpf wird also wieder ausgeführt. Der Variable erg wird nun wieder 5 aufaddeirt und danach wieder ausgegeben. Anschließend wird i auf 2 erhöht.

Analog werden die Fälle für i = 2, i = 3 und i = 4 ausgeführt.

Die Bedingung i < 5 ist bei i = 5 nicht mehr erfüllt. Daher wird der Schleifenrumpf nicht mehr ausgeführt. Die Zählvariable i wird nun verworfen. Durch die Initialisierung von i mit 0 und dem Test i < 5 wird die Schleife genau 5 mal durchlaufen. Natürlich könnten Sie die Schleife auch mit int i = 1 initialisieren und den Test i <= 5 durchführen, jedoch ist dies aus mehreren Gründen unüblich.