Zählschleife
Die for-Schleife ist eine Schleifenart in Java. In solch einer Schleife werden Befehle solange wiederholt, bis eine Abbruchbedingung erfüllt wurde. Ansonsten ist ein laufendes Programm in einer Endlosschleife gefangen.
Inhaltsverzeichnis
[Verbergen]Namensherkunft und Verwendung
For Schleifen haben ihren Namen aus Aussagen, wie "Für jedes x in M ..." (engl. for each x in M) und "Für x gleich 3 sei ..." (engl. for x equals 3 let). Sie versuchen die Initialisierung, Überprüfung und Fortsetzung einer while-Schleife durch syntaktischen Zucker zu vereinfachen, indem sie leichter niederzuschreiben sind, dem Programmierer leichter Fehler erkennen lassen und sich im geistigen Lesefluss besser visualisieren lassen. Nehmen Sie z.B. folgenden Satz: "Sei i gleich 0, so wiederhole solange i kleiner ist als 5 folgende Zeilen, von denen eine die Variable i um 1 erhöht ..." und "Für i gleich 1 bis 5 in Schrittgröße 1 führe folgende Zeilen aus: ...". Letzterer wird den meisten Lesern angenehmer sein, da hier alle relevanten Informationen über die Durchführung der Schleife in ihrer Deklaration vorhanden sind. Aus dem selben Grund gibt es for-Schleifen. Prinzipiell lassen sich natürlich alle for-Schleifen auch durch while-Schleifen und umgekehrt umsetzen.
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. kann eine Zählvariable initialisiert werden, z.B. int i = 0;.
Unter 2. kann und 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. kann 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)
1 | 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.
1 2 3 4 5 | 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.
1 2 3 | 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!
1 2 3 | for (...) erg = erg + 5 ; System.out.println(erg); |
1 2 3 | 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
1 2 3 4 5 | 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.