do-while-Schleife
Bild: Taylor, CC BY-SA 4.0, Wikimedia Commons
Kurz: Die fußgesteuerte Schleifenform in Java — der Körper läuft zuerst einmal, danach wird geprüft, ob er wiederholt werden soll.
Genauer: Syntaktisch steht die Bedingung am Ende, mit abschließendem Semikolon: do { ... } while (bedingung);. Wird oft für Eingabe-Validierung genutzt, da die Eingabeaufforderung mindestens einmal erscheinen muss, bevor geprüft werden kann, ob sie gültig war.
int input;
do {
input = scanner.nextInt();
} while (input < 0);Im Detail
Der entscheidende Unterschied zur normalen while-Schleife: eine while-Schleife prüft die Bedingung VOR dem ersten Durchlauf und kann daher null Mal laufen, eine do-while-Schleife läuft garantiert mindestens einmal, egal wie die Bedingung zu Beginn aussieht:
Scanner scanner = new Scanner(System.in);
int eingabe;
do {
System.out.print("Zahl zwischen 1 und 10 eingeben: ");
eingabe = scanner.nextInt();
if (eingabe < 1 || eingabe > 10) {
System.out.println("Ungültig, bitte erneut versuchen.");
}
} while (eingabe < 1 || eingabe > 10);
System.out.println("Gültige Eingabe: " + eingabe);Menü-getriebene Programme sind ein weiterer typischer Anwendungsfall: das Menü muss mindestens einmal angezeigt werden, bevor überhaupt geprüft werden kann, ob der Nutzer beenden möchte — mit einer normalen while-Schleife müsste man die Menüausgabe entweder vor der Schleife duplizieren oder eine künstliche Bedingung erfinden, die beim ersten Mal immer true ist. In der Praxis ist do-while in Java-Code deutlich seltener als for und while, weil sich die meisten Fälle auch mit einer while(true) { ... if (bedingung) break; }-Konstruktion lösen lassen, die manche als lesbarer empfinden.
Vollständiges Menü-Beispiel
Scanner scanner = new Scanner(System.in);
int auswahl;
do {
System.out.println("1) Neu 2) Öffnen 3) Beenden");
auswahl = scanner.nextInt();
switch (auswahl) {
case 1 -> System.out.println("Neue Datei erstellt");
case 2 -> System.out.println("Datei geöffnet");
case 3 -> System.out.println("Programm wird beendet");
default -> System.out.println("Ungültige Auswahl");
}
} while (auswahl != 3);Das Menü wird garantiert mindestens einmal angezeigt, auch bevor überhaupt eine Eingabe existiert — genau das Verhalten, das eine while-Schleife ohne zusätzlichen Trick nicht bieten kann.
Häufiger Syntaxfehler
Ein klassischer Anfängerfehler ist, das abschließende Semikolon nach der while-Bedingung zu vergessen — anders als bei einer normalen while-Schleife ist es bei do-while zwingend erforderlich, da die Bedingung sonst syntaktisch nicht als Abschluss des do-Blocks erkannt wird:
do {
// ...
} while (bedingung) // FEHLER: fehlendes Semikolon, Compiler-FehlerVergleich zu anderen Sprachen
Nicht jede Sprache bietet eine do-while-Schleife — Python zum Beispiel verzichtet komplett darauf und simuliert dasselbe Verhalten meist mit while True: plus einem break am Ende des Blocks. In Java, C, C++ und C# gehört do-while dagegen zum festen Sprachumfang.
Siehe auch: Fußgesteuerte Schleife, While-Schleife, User Input