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.
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
| Eigenschaft | while | do-while |
|---|---|---|
| Pruefung | Vor dem Durchlauf | Nach dem Durchlauf |
| Mindestausfuehrungen | 0 | 1 |
| Semikolon am Ende | Nein | Ja (nach while(...)) |
| Typischer Einsatz | Allgemein | Eingabevalidierung |
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?
| Situation | Empfohlene Schleife |
|---|---|
| Bekannte Anzahl Durchlaeufe | for |
| Array/Collection durchlaufen | for-each |
| Bedingungsabhaengig | while |
| Mindestens einmal ausfuehren | do-while |
| Endlosschleife mit break | while (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
whileprueft die Bedingung vor jedem Durchlauf (0 oder mehr Ausfuehrungen)do-whileprueft die Bedingung nach dem Durchlauf (mindestens 1 Ausfuehrung)whileist ideal, wenn die Anzahl der Durchlaeufe unbekannt istdo-whileist perfekt fuer Eingabevalidierungwhile (true)mitbreakist ein gaengiges Muster fuer Endlosschleifenbreakbeendet die Schleife,continueueberspringt 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!