In der Syntaxbeschreibung der einzelnen Schleifen wird nur eine einzelne Anweisung, die wiederholt werden soll, angegeben. Anstelle dieser Anweisung kann auch eine Blockanweisung verwendet werden. Diese Anweisung bzw. die Blockanweisung wird auch als Schleifenrumpf bezeichnet.
Syntax
for (Initialisierung; Bedinung; Modifikation) Anweisung;
Die for
-Schleifenanweisung erwartet innerhalb ihrer Klammer 3 Teile:
Zunächst wird bei der for
-Schleife der Initialisierungsteil einmalig ausgeführt.
Im Initialisierungsteil können auch Variablen initialisiert werden,
welche innerhalb der Schleife verwendet werden können und dort auch
ihren Gültigkeitsbereich haben.
Nach dem Initialisierungsteil wird der Bedingungsteil ausgeführt. Das Ergebnis
des dort stehenden Ausdrucks muss boolean
sein. Ist das
Ergebnis
true
, wird der nächste (bzw. erste) Schleifendurchlauf gestartet.
Ein false
als Ergebnis führt dazu, dass mit der Anweisung,
die der Schleife folgt, fortgefahren wird.
Es ist auch möglich, eine Methode zur Auswertung der Bedingung aufzurufen.
Wurde der Schleifenrumpf ausgeführt, wird der Modifikationsteil ausgeführt, bevor wieder der Bedingungsteil der Schleifenanweisung aufgerufen wird. Der Modifikationsteil wird meistens dazu verwendet, Zählvariablen zu modifizieren.
Sowohl der Initialisierungsteil, als auch der Modifikationsteil können mehrere Anweisungen enthalten, die durch ein Komma voneinander getrennt werden.
Alle drei Teile der for
-Schleifenanweisung sind optional. Wird der Initialisierungsteil
bzw. der Modifikationsteil weggelassen, werden entsprechend keine Anweisungen
dort ausgeführt. Fehlt der Bedingungsteil, wird an dieser Stelle
immer true
angenommen. Fehlen Initialisierungs- und Modifikationsteil,
entspricht die for-Schleife, dem Verhalten nach, der while-Schleife.
Nachfolgend ein typisches Beispiel für die Anwendung der for-Schleife.
int counter = 0;
for (int i = 0; i < 10; ++i){
// do something with i
counter += i;
}
while (Bedingung) Anweisung;
Bei der while
-Schleife wird zunächst geprüft,
ob die Bedingung in den Klammern wahr ist, bevor die Schleife ausgeführt wird.
Ist der Wert der Bedingung vor dem ersten Durchlauf false
,
wird die Schleife nicht durchlaufen. Wurde die Schleife betreten, wird diese solange wiederholt,
bis die Bedingung in den runden Klammern als Ergebnis den Wert false
liefert.
Der nachfolgende Quelltextausschnitt zeigt beispielhaft eine Verwendung
der while
-Schleife:
double d = 1.1; while (d < 1000.0){ d = 3.0*d; }
do Anweisung while(Bedingung);
Im Gegensatz zur while
-Schleife wird die do
-Schleife
mindestens einmal durchlaufen. Bei der do
-Schleife wird
am Ende geprüft, ob die Schleife verlassen oder neu ausgeführt wird.
Nachfolgend ein Quelltextausschnitt, der beispielhaft die Verwendung der
do
-Schleife zeigt:
double d = 1.0; do{ d = 3.0*d; }while(d < 1000.0);
for (Typ bezeichner : quelle) Anweisung;
Die foreach
-Schleife dient zum einfachen durchlaufen
von Arrays und Collections. Innerhalb der Klammer wird zunächst der
zu durchlaufende Typ angegeben worauf der Bezeichner folgt, unter dem
das Exemplar des Typs innerhalb der Schleife angesprochen werden kann.
Nach dem Doppelpunkt wird das Array bzw. die Collection angegeben,
welche die zu durchlaufenden Exemplare enthält.
Nachfolgend ein Beispiel zur Verwendung der foreach
-Schleife:
public class ForEachExample { public static void main(String[] args){ String[] sa = new String[4]; sa[0] = "Hi 1"; sa[1] = "Ho 2"; sa[2] = "Ha 3"; sa[3] = "He 4"; for (String s : sa){ System.out.println(s); } } }
Der Ablauf des Programmes bewirkt folgende Ausgabe auf der Console:
Hi 1 Ho 2 Ha 3 He 4
continue
und break
Die Anweisungen continue
und break
dienen
dazu, den nächsten Schleifendurchlauf
zu starten bzw. die Schleife zu verlassen .
continue
dient zum starten des nächsten Schleifendurchlaufbreak
dient zum verlassen der aktuellen Schleife
Das nächste Beispiel zeigt einen Einsatz fü
continue
und break
public class ContinueAndBreak { public static void main(String[] args){ for (int i = 0; i < 10; ++i){ if (i == 7) break; if (i % 2 == 0) continue; System.out.println(i); } } }
Als Ergebnis des Programmablaufs erscheint folgende Ausgabe auf der Systemausgabe:
1 3 5
In der gezeigten "einfachen" Form beziehen sich
continue
und break
immer auf die innerste Schleife, in der sie sich befinden.
Es ist aber auch möglich, dass die Anweisungen sich auf äußere
Schleifen, if
-Anweisungen bzw. Blockanweisungen beziehen, sofern Sie
von diesen umgeben sind.
Um dies zu erreichen, muss dem entsprechenden Sprungblock ein "Label" zugeordnet
werden, welches bem entsprechenden continue
und break
als Sprungziel angegeben wird.