EMZETT.
Login

do-while-Schleife

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-Fehler

Vergleich 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