Schleifen in Java – Kopf-, Fuß- und Zählschleifen¶
Kurzüberblick¶
Schleifen gehören zu den wichtigsten Kontrollstrukturen in Java. Sie ermöglichen es, einen Anweisungsblock mehrfach auszuführen, ohne denselben Code wiederholt hinschreiben zu müssen.
In Java sind vor allem diese Schleifenarten relevant:
while→ kopfgesteuerte Schleifefor→ kopfgesteuerte Schleifedo-while→ fußgesteuerte Schleifeenhanced for/for-each→ spezielle Form zum Durchlaufen von Arrays und Collections
Zusätzlich sind im Zusammenhang mit Schleifen auch diese Steueranweisungen wichtig:
breakcontinue
Für das Verständnis in Prüfungen ist entscheidend, wann die Bedingung geprüft wird, wie oft eine Schleife mindestens läuft und für welche Problemarten welcher Schleifentyp geeignet ist.
1. Was sind Schleifen?¶
Eine Schleife ist eine Kontrollstruktur, mit der ein Codeblock wiederholt ausgeführt wird, solange eine bestimmte Bedingung gilt oder solange noch Elemente verarbeitet werden müssen.
Typische Ziele von Schleifen¶
- Wiederholungen automatisieren
- Code verkürzen
- Zählvorgänge durchführen
- Arrays und Listen verarbeiten
- Eingaben prüfen
- Berechnungen mehrfach anwenden
Grundidee¶
Statt denselben Code mehrfach zu schreiben, wird eine Wiederholung beschrieben.
Beispiel ohne Schleife¶
System.out.println(1);
System.out.println(2);
System.out.println(3);
System.out.println(4);
System.out.println(5);
Beispiel mit Schleife¶
for (int i = 1; i <= 5; i++) {
System.out.println(i);
}
Die Schleife ist kürzer, klarer und leichter anpassbar.
2. Grundbestandteile einer Schleife¶
Unabhängig vom konkreten Schleifentyp lassen sich Schleifen meist in drei logische Bestandteile zerlegen:
-
Initialisierung
Startwert oder Ausgangszustand -
Bedingung
Legt fest, ob ein weiterer Durchlauf stattfindet -
Iteration / Veränderung
Änderung des Zustands nach einem Durchlauf
Allgemeines Ablaufmodell¶
flowchart TD
A[Start] --> B[Initialisierung]
B --> C{Bedingung erfüllt?}
C -- Ja --> D[Schleifenrumpf]
D --> E[Iteration / Veränderung]
E --> C
C -- Nein --> F[Ende]
Wichtige Begriffe¶
| Begriff | Bedeutung |
|---|---|
| Schleifenkopf | Bereich mit Bedingung bzw. Steuerung |
| Schleifenrumpf | Der Codeblock, der wiederholt wird |
| Durchlauf / Iteration | Eine vollständige Ausführung des Schleifenrumpfs |
| Zählvariable | Variable, die die Anzahl der Durchläufe steuert |
3. Einteilung der Schleifen¶
3.1 Kopfgesteuerte Schleifen¶
Bei kopfgesteuerten Schleifen wird die Bedingung vor dem Schleifenrumpf geprüft.
Folge:
- Ist die Bedingung anfangs falsch, läuft die Schleife kein einziges Mal
- Mindestanzahl der Durchläufe: 0
Dazu gehören:
whilefor
3.2 Fußgesteuerte Schleifen¶
Bei fußgesteuerten Schleifen wird die Bedingung nach dem Schleifenrumpf geprüft.
Folge:
- Der Schleifenrumpf wird mindestens einmal ausgeführt
- Mindestanzahl der Durchläufe: 1
Dazu gehört:
do-while
3.3 Elementorientierte Schleifen¶
Die enhanced for-Schleife ist eine Sonderform der for-Schleife. Sie wird verwendet, um nacheinander Elemente aus Arrays oder Collections zu lesen.
Sie ist keine klassische Zählschleife, sondern eine Durchlauf-Schleife für Elemente.
4. Die while-Schleife¶
Definition¶
Die while-Schleife ist kopfgesteuert. Die Bedingung wird vor jedem Durchlauf geprüft.
Syntax¶
while (Bedingung) {
// Anweisungen
}
Einfaches Beispiel¶
int i = 0;
while (i < 5) {
System.out.println(i);
i++;
}
Ablauf¶
ihat den Wert0- Bedingung
i < 5ist wahr - Ausgabe erfolgt
iwird erhöht- Bedingung wird erneut geprüft
Ablaufdiagramm¶
flowchart TD
A[Start] --> B{i < 5?}
B -- Ja --> C[Ausgabe i]
C --> D[i++]
D --> B
B -- Nein --> E[Ende]
Eigenschaften¶
- kopfgesteuert
- 0 bis n Durchläufe
- gut bei unbekannter Wiederholungsanzahl
- Bedingung muss sauber formuliert sein
- Änderung der Kontrollvariable darf nicht vergessen werden
Typische Einsatzfälle¶
- Wiederholen, solange eine Bedingung gilt
- Verarbeitung bis zu einem Grenzwert
- Programme mit Zustandsprüfungen
- Einlesen, bis ein Abbruchkriterium erreicht ist
Beispiel: Countdown¶
int i = 5;
while (i > 0) {
System.out.println(i);
i--;
}
System.out.println("Start!");
Beispiel: Schleife läuft gar nicht¶
int i = 10;
while (i < 5) {
System.out.println(i);
i++;
}
Hier ist die Bedingung von Anfang an falsch. Deshalb gibt es keinen einzigen Durchlauf.
5. Die for-Schleife¶
Definition¶
Die for-Schleife ist ebenfalls kopfgesteuert. Sie eignet sich besonders für zählgesteuerte Wiederholungen.
Syntax¶
for (Initialisierung; Bedingung; Iteration) {
// Anweisungen
}
Standardbeispiel¶
for (int i = 0; i < 5; i++) {
System.out.println(i);
}
Bestandteile im Detail¶
for (int i = 0; i < 5; i++) {
System.out.println(i);
}
int i = 0→ Initialisierungi < 5→ Bedingungi++→ Iteration / Veränderung
Äquivalenz zur while-Schleife¶
Die for-Schleife lässt sich logisch als while ausdrücken:
int i = 0;
while (i < 5) {
System.out.println(i);
i++;
}
Eigenschaften¶
- kopfgesteuert
- 0 bis n Durchläufe
- besonders übersichtlich bei Zählvorgängen
- Initialisierung, Bedingung und Iteration stehen kompakt zusammen
Typische Einsatzfälle¶
- feste Anzahl an Wiederholungen
- Durchlaufen von Indexbereichen
- Berechnungen mit Zählern
- Zugriff auf Array-Elemente über Indizes
Varianten¶
Aufwärts zählen¶
for (int i = 1; i <= 10; i++) {
System.out.println(i);
}
Abwärts zählen¶
for (int i = 10; i >= 1; i--) {
System.out.println(i);
}
Andere Schrittweite¶
for (int i = 0; i <= 10; i += 2) {
System.out.println(i);
}
Mehrere Variablen im Schleifenkopf¶
for (int i = 0, j = 10; i < j; i++, j--) {
System.out.println("i = " + i + ", j = " + j);
}
Das ist syntaktisch erlaubt, sollte aber sparsam eingesetzt werden, damit der Code lesbar bleibt.
for-Schleife ohne Teile¶
Alle drei Teile sind optional:
for (;;) {
System.out.println("Endlosschleife");
}
Das entspricht einer absichtlichen Endlosschleife.
6. Die do-while-Schleife¶
Definition¶
Die do-while-Schleife ist fußgesteuert. Der Schleifenrumpf wird zuerst ausgeführt, danach wird die Bedingung geprüft.
Syntax¶
do {
// Anweisungen
} while (Bedingung);
Wichtiges Erkennungsmerkmal¶
Nach while (Bedingung) steht bei do-while ein Semikolon.
Beispiel¶
int i = 0;
do {
System.out.println(i);
i++;
} while (i < 5);
Eigenschaften¶
- fußgesteuert
- mindestens 1 Durchlauf
- sinnvoll, wenn eine Aktion auf jeden Fall einmal stattfinden soll
Typische Einsatzfälle¶
- Eingabevalidierung
- Menüsteuerung
- Wiederholung bis Benutzer abbrechen möchte
Beispiel: Eingabe prüfen¶
int zahl;
do {
System.out.println("Bitte eine positive Zahl eingeben:");
zahl = scanner.nextInt();
} while (zahl <= 0);
System.out.println("Gültige Eingabe: " + zahl);
Beispiel: Unterschied zu while¶
int i = 10;
do {
System.out.println(i);
} while (i < 5);
Obwohl i < 5 falsch ist, wird 10 einmal ausgegeben, weil die Prüfung erst am Ende erfolgt.
Ablaufdiagramm¶
flowchart TD
A[Start] --> B[Schleifenrumpf]
B --> C{Bedingung erfüllt?}
C -- Ja --> B
C -- Nein --> D[Ende]
7. Die enhanced for-Schleife (for-each)¶
Definition¶
Die enhanced for-Schleife dient zum bequemen Durchlaufen aller Elemente eines Arrays oder einer Collection, ohne dass ein Index manuell verwaltet werden muss.
Syntax¶
for (Datentyp variable : datenstruktur) {
// Anweisungen
}
Beispiel mit Array¶
int[] zahlen = {10, 20, 30, 40};
for (int zahl : zahlen) {
System.out.println(zahl);
}
Beispiel mit String-Array¶
String[] namen = {"Anna", "Ben", "Chris"};
for (String name : namen) {
System.out.println(name);
}
Eigenschaften¶
- sehr lesbar
- kein Index notwendig
- geeignet zum vollständigen Durchlaufen aller Elemente
- besonders nützlich für Arrays und Collections
Vorteile¶
- weniger Fehler bei der Indexverwaltung
- kompakter Code
- gute Lesbarkeit
Grenzen¶
Mit for-each ist es schwierig oder ungeeignet, wenn man:
- den Index benötigt
- nur einen Teilbereich durchlaufen möchte
- rückwärts laufen will
- Elemente gezielt über den Index verändern will
Vergleich: normales for vs. enhanced for¶
Normales for¶
int[] zahlen = {10, 20, 30, 40};
for (int i = 0; i < zahlen.length; i++) {
System.out.println(zahlen[i]);
}
Enhanced for¶
int[] zahlen = {10, 20, 30, 40};
for (int zahl : zahlen) {
System.out.println(zahl);
}
Merksatz¶
Die enhanced for-Schleife ist ideal, wenn alle Elemente vollständig und nur lesend verarbeitet werden sollen.
8. Vergleich aller relevanten Schleifenarten¶
| Schleife | Art | Bedingung geprüft | Mindestdurchläufe | Typischer Einsatz |
|---|---|---|---|---|
while |
kopfgesteuert | vor dem Durchlauf | 0 | unbekannte Anzahl von Wiederholungen |
for |
kopfgesteuert | vor dem Durchlauf | 0 | bekannte Anzahl von Wiederholungen |
do-while |
fußgesteuert | nach dem Durchlauf | 1 | Eingabe, Menü, Validierung |
enhanced for |
elementorientiert | implizit durch Datenstruktur | abhängig von Anzahl der Elemente | Arrays und Collections durchlaufen |
9. Wann nimmt man welche Schleife?¶
for¶
Verwenden, wenn die Anzahl der Wiederholungen bekannt oder leicht über einen Zähler steuerbar ist.
for (int i = 0; i < 10; i++) {
System.out.println(i);
}
while¶
Verwenden, wenn nicht vorher feststeht, wie oft wiederholt werden muss.
while (!fertig) {
// weiterarbeiten
}
do-while¶
Verwenden, wenn der Schleifenrumpf mindestens einmal ausgeführt werden soll.
do {
// Eingabe lesen
} while (ungueltig);
enhanced for¶
Verwenden, wenn eine gesamte Datenstruktur der Reihe nach gelesen werden soll.
for (String name : namen) {
System.out.println(name);
}
10. Schleifen mit Arrays¶
Arrays sind in Prüfungen und Übungen sehr häufig mit Schleifen verknüpft.
Array mit klassischer for-Schleife¶
int[] zahlen = {5, 7, 9, 11};
for (int i = 0; i < zahlen.length; i++) {
System.out.println("Index: " + i + ", Wert: " + zahlen[i]);
}
Erklärung¶
zahlen.lengthliefert die Anzahl der Elemente- gültige Indizes gehen von
0bislength - 1
Array mit enhanced for¶
int[] zahlen = {5, 7, 9, 11};
for (int zahl : zahlen) {
System.out.println(zahl);
}
Wichtiger Unterschied¶
- klassisches
for→ Zugriff auf Index und Wert - enhanced
for→ Zugriff nur auf Wert
11. Verschachtelte Schleifen¶
Definition¶
Eine verschachtelte Schleife ist eine Schleife innerhalb einer anderen Schleife.
Die innere Schleife wird für jeden Durchlauf der äußeren Schleife vollständig ausgeführt.
Beispiel¶
for (int i = 1; i <= 3; i++) {
for (int j = 1; j <= 3; j++) {
System.out.println("i = " + i + ", j = " + j);
}
}
Analyse¶
- äußere Schleife: 3 Durchläufe
- innere Schleife: 3 Durchläufe je äußerem Durchlauf
- Gesamtanzahl der inneren Ausführungen:
3 * 3 = 9
Typische Anwendungsbereiche¶
- Tabellen
- Matrizen
- 2-dimensionale Arrays
- Muster-Ausgaben
- Koordinatensysteme
Beispiel: Rechteck aus Sternen¶
for (int zeile = 1; zeile <= 3; zeile++) {
for (int spalte = 1; spalte <= 5; spalte++) {
System.out.print("*");
}
System.out.println();
}
Ausgabe¶
*****
*****
*****
Beispiel: Einmaleins-Ausschnitt¶
for (int i = 1; i <= 3; i++) {
for (int j = 1; j <= 3; j++) {
System.out.print((i * j) + "\t");
}
System.out.println();
}
12. break und continue¶
Diese Anweisungen gehören nicht selbst zu den Schleifenarten, sind aber für Schleifen sehr wichtig.
12.1 break¶
break beendet eine Schleife sofort vollständig.
Beispiel¶
for (int i = 0; i < 10; i++) {
if (i == 5) {
break;
}
System.out.println(i);
}
Ausgabe¶
0
1
2
3
4
Sobald i == 5 gilt, wird die Schleife verlassen.
Typischer Einsatz¶
- Suchvorgang abbrechen, wenn Element gefunden wurde
- vorzeitiger Ausstieg bei Fehlerbedingungen
- Endlosschleifen kontrolliert verlassen
12.2 continue¶
continue beendet nicht die Schleife, sondern überspringt nur den aktuellen Durchlauf.
Beispiel¶
for (int i = 0; i < 5; i++) {
if (i == 2) {
continue;
}
System.out.println(i);
}
Ausgabe¶
0
1
3
4
Die 2 wird übersprungen, die Schleife läuft danach weiter.
12.3 break und continue im Vergleich¶
| Anweisung | Wirkung |
|---|---|
break |
beendet die gesamte Schleife |
continue |
überspringt nur den aktuellen Durchlauf |
13. Markierte Schleifen (labeled break / continue)¶
In Java können Schleifen mit einem Label versehen werden. Das ist ein fortgeschrittenes Thema, aber prüfungsrelevant, weil es gelegentlich in Aufgaben oder fremdem Code auftaucht.
Beispiel mit break¶
aussen:
for (int i = 1; i <= 3; i++) {
for (int j = 1; j <= 3; j++) {
if (j == 2) {
break aussen;
}
System.out.println("i = " + i + ", j = " + j);
}
}
Hier beendet break aussen; nicht nur die innere, sondern auch die äußere Schleife.
Beispiel mit continue¶
aussen:
for (int i = 1; i <= 3; i++) {
for (int j = 1; j <= 3; j++) {
if (j == 2) {
continue aussen;
}
System.out.println("i = " + i + ", j = " + j);
}
}
Hier wird beim Eintreten der Bedingung direkt mit dem nächsten Durchlauf der äußeren Schleife weitergemacht.
Hinweis¶
Labels sind erlaubt, sollten aber nur sparsam verwendet werden, da sie den Code oft schwerer lesbar machen.
14. Endlosschleifen¶
Definition¶
Eine Endlosschleife ist eine Schleife, deren Abbruchbedingung nie erreicht wird oder absichtlich nicht existiert.
Beispiel mit while¶
while (true) {
System.out.println("Läuft unendlich");
}
Beispiel mit for¶
for (;;) {
System.out.println("Läuft unendlich");
}
Ursachen unbeabsichtigter Endlosschleifen¶
- Kontrollvariable wird nicht verändert
- falsche Bedingung
- Abbruchlogik fehlt
- Bedingung bleibt immer wahr
Beispiel für einen typischen Fehler¶
int i = 0;
while (i < 5) {
System.out.println(i);
}
Hier fehlt i++. Dadurch bleibt i dauerhaft 0, die Bedingung ist immer wahr und die Schleife endet nie.
Absichtliche Endlosschleifen¶
Sie können sinnvoll sein, etwa bei Servern, Programmschleifen oder Menüs mit explizitem Abbruch:
while (true) {
String eingabe = scanner.nextLine();
if (eingabe.equals("exit")) {
break;
}
System.out.println("Eingabe: " + eingabe);
}
15. Häufige Fehlerquellen¶
15.1 Off-by-One-Fehler¶
Ein sehr häufiger Fehler bei Schleifen ist, dass eine Schleife einmal zu oft oder einmal zu wenig läuft.
Beispiel¶
for (int i = 0; i <= 5; i++) {
System.out.println(i);
}
Die Ausgabe ist 0 bis 5, also 6 Durchläufe.
Wenn nur fünf Durchläufe gemeint waren, müsste die Bedingung lauten:
for (int i = 0; i < 5; i++) {
System.out.println(i);
}
15.2 Falsche Start- oder Endwerte¶
for (int i = 1; i < 5; i++) {
System.out.println(i);
}
Das ergibt 1, 2, 3, 4.
Wer 1 bis 5 ausgeben will, braucht i <= 5.
15.3 Falscher Vergleichsoperator¶
int i = 0;
while (i > 5) {
System.out.println(i);
i++;
}
Die Schleife startet nie, weil 0 > 5 falsch ist.
15.4 Fehlende Änderung der Kontrollvariable¶
int i = 0;
while (i < 5) {
System.out.println(i);
}
Die Schleife wird unendlich.
15.5 Falsches Semikolon¶
Fehlerhaft¶
for (int i = 0; i < 5; i++); {
System.out.println(i);
}
Das Semikolon beendet die Schleife sofort. Der Block gehört dann nicht mehr zur Schleife.
Wichtig¶
Bei do-while ist das Semikolon korrekt und notwendig:
do {
System.out.println("Hallo");
} while (false);
15.6 Zugriff außerhalb des Arrays¶
int[] zahlen = {1, 2, 3};
for (int i = 0; i <= zahlen.length; i++) {
System.out.println(zahlen[i]);
}
Das führt zu einem Fehler, weil der letzte gültige Index zahlen.length - 1 ist.
Korrekt ist:
for (int i = 0; i < zahlen.length; i++) {
System.out.println(zahlen[i]);
}
16. Schleifen verstehen durch Ablaufanalyse¶
In Prüfungen muss man oft sagen, wie oft eine Schleife läuft oder welche Ausgabe entsteht.
Beispiel 1¶
for (int i = 0; i < 3; i++) {
System.out.println(i);
}
Ausgabe¶
0
1
2
Die Schleife läuft 3-mal.
Beispiel 2¶
int i = 3;
while (i > 0) {
System.out.println(i);
i--;
}
Ausgabe¶
3
2
1
Beispiel 3¶
int i = 5;
do {
System.out.println(i);
i++;
} while (i < 5);
Ausgabe¶
5
Die Schleife läuft genau 1-mal.
17. Praktische Beispiele¶
17.1 Summe von 1 bis 5 berechnen¶
int summe = 0;
for (int i = 1; i <= 5; i++) {
summe += i;
}
System.out.println("Summe: " + summe);
Ergebnis¶
Summe: 15
17.2 Gerade Zahlen ausgeben¶
for (int i = 0; i <= 10; i += 2) {
System.out.println(i);
}
17.3 Array durchsuchen¶
int[] zahlen = {3, 7, 11, 15};
int gesucht = 11;
boolean gefunden = false;
for (int zahl : zahlen) {
if (zahl == gesucht) {
gefunden = true;
break;
}
}
System.out.println("Gefunden: " + gefunden);
17.4 Benutzereingabe wiederholen, bis korrekt¶
String eingabe;
do {
System.out.println("Bitte ja eingeben:");
eingabe = scanner.nextLine();
} while (!eingabe.equals("ja"));
18. Zusammenhang mit Kontrollstrukturen¶
Schleifen arbeiten häufig zusammen mit:
ifelseswitchbreakcontinue
Beispiel mit if in einer Schleife¶
for (int i = 1; i <= 10; i++) {
if (i % 2 == 0) {
System.out.println(i + " ist gerade");
} else {
System.out.println(i + " ist ungerade");
}
}
Hier wird die Schleife genutzt, um für mehrere Werte dieselbe Entscheidungslogik anzuwenden.
19. Prüfungsrelevanz¶
Schleifen sind ein Kernthema in Java-Grundlagen und tauchen sehr häufig in Klausuren, Übungen und Programmieraufgaben auf.
Typische Prüfungsfragen¶
- Unterschied zwischen
while,forunddo-while - Erklärung von kopf- und fußgesteuerter Schleife
- Vorhersage von Ausgaben
- Anzahl der Durchläufe bestimmen
- Fehler in Schleifen finden
- Endlosschleifen erkennen
- Schleifen ineinander verschachteln
- Arrays mit Schleifen verarbeiten
breakundcontinueerklärenforinwhileumformen und umgekehrt- erklären, wann
enhanced forsinnvoll ist
Besonders wichtig für Prüfungen¶
| Thema | Warum wichtig |
|---|---|
| Kopf- vs. Fußsteuerung | Grundverständnis der Ausführung |
for vs. while |
Auswahl der passenden Schleife |
do-while |
Mindestdurchlauf verstehen |
enhanced for |
häufig bei Arrays und Collections |
| Off-by-One-Fehler | sehr typische Fehlerquelle |
| Endlosschleifen | wichtig für Fehlersuche |
break und continue |
Steuerung innerhalb von Schleifen |
| verschachtelte Schleifen | oft in Aufgaben mit Tabellen oder Mustern |
20. Merksätze¶
- Kopfgesteuert bedeutet: erst prüfen, dann ausführen.
- Fußgesteuert bedeutet: erst ausführen, dann prüfen.
whileeignet sich für Wiederholungen mit offener Laufzeit.foreignet sich für zählgesteuerte Abläufe.do-whileeignet sich, wenn der Code mindestens einmal laufen muss.- Die enhanced
for-Schleife ist ideal zum bequemen Durchlaufen aller Elemente. breakbeendet die Schleife vollständig.continueüberspringt nur den aktuellen Durchlauf.- Verschachtelte Schleifen multiplizieren die Zahl der inneren Ausführungen.
21. Zusammenfassung¶
Java kennt mehrere Schleifenformen, die jeweils für unterschiedliche Problemtypen geeignet sind.
Die wichtigsten Schleifenarten¶
-
while
kopfgesteuert, flexibel, geeignet bei unbekannter Wiederholungszahl -
for
kopfgesteuert, kompakt, ideal für Zählschleifen -
do-while
fußgesteuert, mindestens ein Durchlauf -
enhanced for
einfaches Durchlaufen von Arrays und Collections
Zentrale Unterschiede¶
| Frage | while | for | do-while | enhanced for |
|---|---|---|---|---|
| Vorab-Bedingung? | ja | ja | nein | implizit |
| Mindestens ein Durchlauf? | nein | nein | ja | nur bei vorhandenen Elementen |
| Gut für Zählung? | bedingt | ja | bedingt | nein |
| Gut für Arrays? | möglich | ja | möglich | sehr gut |
22. Kernaussagen¶
- Schleifen wiederholen Anweisungen kontrolliert.
- Java verwendet hauptsächlich
while,for,do-whileund die enhancedfor-Schleife. whileundforsind kopfgesteuert.do-whileist fußgesteuert.- Die enhanced
for-Schleife dient zum Durchlaufen von Elementen. forist besonders geeignet, wenn die Anzahl der Wiederholungen bekannt ist.whileist besonders geeignet, wenn die Anzahl der Wiederholungen nicht feststeht.do-whilewird verwendet, wenn mindestens ein Durchlauf garantiert sein soll.breakundcontinuesteuern das Verhalten innerhalb von Schleifen.- Häufige Fehler sind Endlosschleifen, Off-by-One-Fehler und fehlerhafte Bedingungen.
- Verschachtelte Schleifen sind wichtig für Tabellen, Matrizen und Muster.
```