Beispiel
Hier zunächst einmal ein typisches Anwendungsbeispiel für eine while-Schleife:
1 while (strecke < 50)
2 {
3 otto.fahren(1);
4 otto.anzeigen();
5 strecke++;
6 }
Zeile 1 enthält den Schleifenkopf. Auf das Schlüsselwort while folgt eine logische Bedingung in runden Klammern, die Schleifenbedingung. In den Zeilen 2 bis 6 sehen wir eine Anweisungsliste, die hier als Schleifenkörper bezeichnet wird.
Programmfluss
Hier das Flussdiagramm, passend zur while-Schleife im obigen Beispiel. Dieses Bild entstammt der Folge 4.2 des Java-Kurses. Dort ist der Programmfluss auch ausführlich erklärt worden.
Syntax
Kommen wir nun zur Syntax einer while-Schleife. Eigentlich wurde die Syntax ja schon weiter oben beschrieben: "Auf das Schlüsselwort while folgt eine logische Bedingung…" und so weiter. Aber ein Syntaxdiagramm ist noch übersichtlicher:
Die Syntax einer Anweisungsliste sieht so aus:
Eine Anweisungsliste ist entweder eine einzelne Anweisung oder eine Liste von Anweisungen, die durch geschweifte Klammern zusammengehalten wird. Die einzelnen Anweisungen werden durch Strichpunkte (Semikola) getrennt.
Verschachtelte while-Schleifen
Eine Anweisung wiederum kann eine einfache Zuweisung wie
x = 20;
sein, aber auch eine if-else-Anweisung oder eine weitere while-Schleife. Aus diesem Grund kann man auch mehrere while-Schleifen ineinander verschachteln, ähnlich wie man ja auch mehrere if-else-Anweisungen ineinander verschachteln kann. Damit kann man ganz schön komplizierte Konstrukte bauen, die man irgendwann selbst nicht mehr versteht. Also Vorsicht!
while (x < 10) { while (y < 10) { while (z < 10) { z++; System.out.println("z erhöht auf "+z); } y++; System.out.println("y erhöht auf " +y); } x++; System.out.println("x erhöht auf "+x); }
Hier haben wir eine dreifach gestaffelte, allerdings völlig sinnfreie while-Schleife, die insgesamt 1000 mal durchlaufen wird.
while-Schleifen sind vorprüfend. Die Schleifenbedingung wird vor dem jeweiligen Schleifendurchlauf überprüft. Daher kann es passieren, dass eine while-Schleife auch gar nicht durchlaufen wird.