Zum Inhalt springen
Java Anfänger 20 min

while & do-while

while- und do-while-Schleifen in Java: Wenn du nicht weißt, wie oft eine Schleife laufen soll. Mit Eingabevalidierung und Spiellogik.

Aktualisiert:

while & do-while Schleifen in Java

Nicht immer weisst du vorher, wie oft eine Schleife laufen soll. Wenn ein Benutzer Eingaben macht, bis er “quit” tippt, oder wenn du auf eine Bedingung wartest — dann ist die while-Schleife dein Werkzeug.

Die while-Schleife

int zaehler = 0;

while (zaehler < 5) {
    System.out.println("Zaehler: " + zaehler);
    zaehler++;
}

Ausgabe:

Zaehler: 0
Zaehler: 1
Zaehler: 2
Zaehler: 3
Zaehler: 4

Aufbau

while (bedingung) {
    // Wird wiederholt, solange bedingung true ist
}

Wichtig: Die Bedingung wird vor jedem Durchlauf geprueft. Ist sie von Anfang an false, wird der Koerper nie ausgefuehrt.

int x = 100;

while (x < 5) {
    System.out.println("Das wird nie ausgefuehrt!");
    x++;
}

Die do-while-Schleife

Der Unterschied: Die Bedingung wird nach dem ersten Durchlauf geprueft. Der Koerper wird also mindestens einmal ausgefuehrt:

int zaehler = 100;

do {
    System.out.println("Zaehler: " + zaehler);
    zaehler++;
} while (zaehler < 5);

Ausgabe:

Zaehler: 100

Obwohl 100 < 5 false ist, wird der Koerper einmal ausgefuehrt!

Vergleich while vs. do-while

Eigenschaftwhiledo-while
PruefungVor dem DurchlaufNach dem Durchlauf
Mindestausfuehrungen01
Semikolon am EndeNeinJa (nach while(...))
Typischer EinsatzAllgemeinEingabevalidierung

Vergleich: for vs. while

// for-Schleife: Wenn die Anzahl bekannt ist
for (int i = 0; i < 10; i++) {
    System.out.println(i);
}

// while-Schleife: Wenn die Anzahl unbekannt ist
var scanner = new Scanner(System.in);
var eingabe = "";
while (!eingabe.equals("quit")) {
    eingabe = scanner.nextLine();
    System.out.println("Du hast eingegeben: " + eingabe);
}

Vergleich mit Python

# Python: while
zaehler = 0
while zaehler < 5:
    print(zaehler)
    zaehler += 1
// Java: while (fast identisch, aber mit Klammern und Semikolons)
int zaehler = 0;
while (zaehler < 5) {
    System.out.println(zaehler);
    zaehler++;
}

Python hat kein do-while! In Java hast du diese zusaetzliche Moeglichkeit.

Praktische Beispiele

Eingabevalidierung

import java.util.Scanner;

public class EingabeValidierung {
    public static void main(String[] args) {
        var scanner = new Scanner(System.in);
        int alter;

        do {
            System.out.print("Gib dein Alter ein (0-120): ");
            alter = scanner.nextInt();

            if (alter < 0 || alter > 120) {
                System.out.println("Ungueltige Eingabe! Versuche es nochmal.");
            }
        } while (alter < 0 || alter > 120);

        System.out.println("Dein Alter: " + alter);
        scanner.close();
    }
}

Zahlenraten-Spiel

import java.util.Scanner;
import java.util.Random;

public class Zahlenraten {
    public static void main(String[] args) {
        var random = new Random();
        var geheimeZahl = random.nextInt(1, 101); // 1-100
        var scanner = new Scanner(System.in);
        var versuche = 0;
        var geraten = false;

        System.out.println("Ich denke an eine Zahl zwischen 1 und 100!");

        while (!geraten) {
            System.out.print("Dein Tipp: ");
            var tipp = scanner.nextInt();
            versuche++;

            if (tipp < geheimeZahl) {
                System.out.println("Zu niedrig!");
            } else if (tipp > geheimeZahl) {
                System.out.println("Zu hoch!");
            } else {
                geraten = true;
                System.out.println("Richtig! Du hast " + versuche + " Versuche gebraucht.");
            }
        }

        scanner.close();
    }
}

Passwort-Abfrage mit maximal 3 Versuchen

import java.util.Scanner;

public class PasswortAbfrage {
    public static void main(String[] args) {
        var scanner = new Scanner(System.in);
        final var RICHTIGES_PASSWORT = "java2026";
        final var MAX_VERSUCHE = 3;
        var versuche = 0;
        var zugang = false;

        while (versuche < MAX_VERSUCHE && !zugang) {
            System.out.printf("Passwort eingeben (Versuch %d/%d): ",
                    versuche + 1, MAX_VERSUCHE);
            var eingabe = scanner.nextLine();

            if (eingabe.equals(RICHTIGES_PASSWORT)) {
                zugang = true;
            } else {
                versuche++;
                if (versuche < MAX_VERSUCHE) {
                    System.out.println("Falsches Passwort! Versuche es nochmal.");
                }
            }
        }

        if (zugang) {
            System.out.println("Zugang gewaehrt! Willkommen.");
        } else {
            System.out.println("Zu viele Fehlversuche. Gesperrt!");
        }

        scanner.close();
    }
}

Collatz-Vermutung

var zahl = 27;
var schritte = 0;

System.out.print("Collatz-Folge: " + zahl);

while (zahl != 1) {
    if (zahl % 2 == 0) {
        zahl /= 2;
    } else {
        zahl = 3 * zahl + 1;
    }
    System.out.print(" -> " + zahl);
    schritte++;
}

System.out.println("\nSchritte: " + schritte);

Summe bis zum Schwellenwert

var summe = 0;
var zahl = 1;

while (summe < 1000) {
    summe += zahl;
    zahl++;
}

System.out.println("Die Summe 1 + 2 + ... + " + (zahl - 1) + " = " + summe);
// Die Summe 1 + 2 + ... + 45 = 1035

Endlosschleifen

Manchmal willst du eine Schleife, die “ewig” laeuft (bis break):

var scanner = new Scanner(System.in);

while (true) {
    System.out.print("Befehl eingeben (quit zum Beenden): ");
    var befehl = scanner.nextLine();

    if (befehl.equals("quit")) {
        System.out.println("Auf Wiedersehen!");
        break;
    }

    System.out.println("Befehl ausgefuehrt: " + befehl);
}

Achtung: Versehentliche Endlosschleife

// ENDLOSSCHLEIFE -- i wird nie groesser!
int i = 0;
while (i < 10) {
    System.out.println(i);
    // i++ vergessen!
}

// ENDLOSSCHLEIFE -- falsche Bedingung!
int j = 10;
while (j > 0) {
    System.out.println(j);
    j++; // Sollte j-- sein!
}

Tipp: Wenn dein Programm haengt, druecke Ctrl + C im Terminal oder den roten Stop-Button in IntelliJ.

break und continue in while

// break: Schleife sofort verlassen
var i = 0;
while (i < 100) {
    if (i * i > 50) {
        break;
    }
    System.out.print(i + " ");
    i++;
}
// Ausgabe: 0 1 2 3 4 5 6 7

// continue: Rest ueberspringen
var j = 0;
while (j < 10) {
    j++;
    if (j % 2 == 0) {
        continue; // Gerade Zahlen ueberspringen
    }
    System.out.print(j + " ");
}
// Ausgabe: 1 3 5 7 9

Wann welche Schleife?

SituationEmpfohlene Schleife
Bekannte Anzahl Durchlaeufefor
Array/Collection durchlaufenfor-each
Bedingungsabhaengigwhile
Mindestens einmal ausfuehrendo-while
Endlosschleife mit breakwhile (true)

Uebungen

Uebung 1: Summe berechnen

Lies wiederholt Zahlen vom Benutzer ein und addiere sie auf. Wenn der Benutzer 0 eingibt, gib die Gesamtsumme aus.

Uebung 2: Ziffern zaehlen

Schreibe ein Programm, das die Anzahl der Ziffern einer positiven Ganzzahl zaehlt (z.B. 12345 hat 5 Ziffern). Verwende eine while-Schleife und wiederholte Division durch 10.

Uebung 3: Menue-System

Erstelle ein einfaches Menue mit do-while:

1. Begruessung
2. Uhrzeit anzeigen
3. Beenden

Das Menue soll nach jeder Aktion erneut angezeigt werden, bis der Benutzer “3” waehlt.

Uebung 4: Groesster gemeinsamer Teiler

Berechne den GGT zweier Zahlen mit dem Euklidischen Algorithmus (while-Schleife).

Was kommt als Naechstes?

Jetzt kennst du alle Schleifen-Typen und Kontrollstrukturen in Java! In der naechsten Lektion steigen wir in Methoden ein — damit kannst du deinen Code in wiederverwendbare Bausteine aufteilen.

Zusammenfassung

  • while prueft die Bedingung vor jedem Durchlauf (0 oder mehr Ausfuehrungen)
  • do-while prueft die Bedingung nach dem Durchlauf (mindestens 1 Ausfuehrung)
  • while ist ideal, wenn die Anzahl der Durchlaeufe unbekannt ist
  • do-while ist perfekt fuer Eingabevalidierung
  • while (true) mit break ist ein gaengiges Muster fuer Endlosschleifen
  • break beendet die Schleife, continue ueberspringt den Rest des Durchlaufs
  • Vergiss nie, die Abbruchbedingung zu aktualisieren (sonst Endlosschleife!)

Pro-Tipp: Wenn du eine Endlosschleife in IntelliJ startest, kannst du das Programm mit dem roten Quadrat-Button in der Run-Leiste stoppen. Und ein guter Trick: Setze beim Debuggen einen Breakpoint in der Schleife und nutze den Debugger, um Schritt fuer Schritt zu pruefen, ob deine Abbruchbedingung korrekt ist!

Zurück zum Java Kurs