Java do...while-Schleife
Die do...while-Schleife in Java führt einen Block mindestens einmal aus, bevor die Bedingung geprüft wird.
Die do/while-Schleife ist das Spiegelbild der while-Schleife: Sie führt den Rumpf zuerst aus und prüft danach die Bedingung. Das Ergebnis ist eine Schleife, die garantiert mindestens einmal ausgeführt wird – selbst wenn die Bedingung von Anfang an falsch war. Diese Seite behandelt die Syntax, den Unterschied zu while, wann man sie einsetzen sollte, und einen häufigen Scope-Fehler.
Syntax
do {
// body — runs at least once
} while (condition);Beachte das abschließende Semikolon nach while (condition) – es ist leicht zu übersehen, und der Compiler wird es dir mitteilen, wenn du es vergisst.
Ein direktes Pendant zum while-Zählerbeispiel:
int i = 1;
do {
System.out.println(i);
i++;
} while (i <= 5);Ausgabe: 1 2 3 4 5 – identisch mit der while-Version, aber der Rumpf wird immer zuerst ausgeführt.
Wenn die Bedingung von Anfang an falsch ist
Hier unterscheidet sich do/while von while:
int i = 10;
do {
System.out.println(i); // prints 10 once
i++;
} while (i < 5);Der Rumpf wird einmal ausgeführt, dann ist die Bedingung 10 < 5 falsch und die Schleife beendet sich. Eine normale while-Schleife hätte den Rumpf vollständig übersprungen.
Wann man do/while verwendet
Der klassische Anwendungsfall ist die Eingabevalidierung – man muss die Eingabe zuerst lesen, um zu wissen, ob sie gültig ist:
import java.util.Scanner;
Scanner s = new Scanner(System.in);
int n;
do {
System.out.print("Enter a positive number: ");
n = s.nextInt();
} while (n <= 0);Ein weiterer natürlicher Einsatzbereich sind Menü-Schleifen – das Menü soll immer mindestens einmal angezeigt werden:
int choice;
do {
showMenu();
choice = readChoice();
handle(choice);
} while (choice != 0);In beiden Fällen müsste man mit einer einfachen while-Schleife die Arbeit der ersten Iteration außerhalb der Schleife duplizieren oder eine Sentinel-Variable verwenden. do/while ist sauberer.
Hinweis zum Scope
Eine im Rumpf deklarierte Variable ist für die while-Bedingung nicht sichtbar:
do {
int x = readValue();
} while (x > 0); // compile error: x not in scopeDeklariere sie außerhalb:
int x;
do {
x = readValue();
} while (x > 0);Wie häufig man sie tatsächlich verwendet
In der Praxis ist do/while die am seltensten verwendete der drei Java-Schleifen. Die meisten Schleifen wissen vor der ersten Iteration, ob sie ausgeführt werden sollen, daher decken while und for sie ab. Doch wenn „einmal ausführen und dann vielleicht wiederholen" die natürliche Beschreibung ist, ist do/while der klarste Ausdruck.
Ein vollständiges Beispiel
Wie geht es weiter
Die gebräuchlichste Java-Schleife ist die for-Schleife, die Zähler, Bedingung und Aktualisierungsschritt in einem übersichtlichen Header bündelt.