for-Schleifen
Alles über for-Schleifen in Java: Klassische for-Schleife, enhanced for-each, verschachtelte Schleifen und praktische Beispiele.
for-Schleifen in Java
Schleifen gehoeren zu den wichtigsten Konzepten in der Programmierung. Mit ihnen kannst du Code wiederholt ausfuehren, ohne ihn mehrfach schreiben zu muessen. Die for-Schleife ist dabei der vielseitigste Schleifen-Typ in Java.
Die klassische for-Schleife
for (int i = 0; i < 5; i++) {
System.out.println("Durchlauf " + i);
}
Ausgabe:
Durchlauf 0
Durchlauf 1
Durchlauf 2
Durchlauf 3
Durchlauf 4
Aufbau
for (Initialisierung; Bedingung; Update) {
// Schleifenkoerper
}
| Teil | Beschreibung | Beispiel |
|---|---|---|
| Initialisierung | Wird einmal am Anfang ausgefuehrt | int i = 0 |
| Bedingung | Wird vor jedem Durchlauf geprueft | i < 5 |
| Update | Wird nach jedem Durchlauf ausgefuehrt | i++ |
Ablauf visualisiert
1. Initialisierung: i = 0
2. Bedingung pruefen: i < 5? --> Ja
3. Koerper ausfuehren
4. Update: i++
5. Zurueck zu Schritt 2
...bis Bedingung false ist
Variationen
Rueckwaerts zaehlen
for (int i = 10; i > 0; i--) {
System.out.println(i);
}
System.out.println("Start!");
In Schritten zaehlen
// Nur gerade Zahlen
for (int i = 0; i <= 20; i += 2) {
System.out.print(i + " ");
}
// Ausgabe: 0 2 4 6 8 10 12 14 16 18 20
Mehrere Variablen
for (int i = 0, j = 10; i < j; i++, j--) {
System.out.println("i=" + i + ", j=" + j);
}
Ausgabe:
i=0, j=10
i=1, j=9
i=2, j=8
i=3, j=7
i=4, j=6
Die enhanced for-Schleife (for-each)
Fuer das Durchlaufen von Arrays und Collections gibt es die for-each-Schleife:
String[] namen = {"Max", "Anna", "Leo", "Julia"};
for (String name : namen) {
System.out.println("Hallo " + name + "!");
}
Ausgabe:
Hallo Max!
Hallo Anna!
Hallo Leo!
Hallo Julia!
Mit var
var zahlen = List.of(1, 2, 3, 4, 5);
for (var zahl : zahlen) {
System.out.println(zahl * zahl);
}
Vergleich: klassisch vs. for-each
var farben = new String[]{"Rot", "Gruen", "Blau"};
// Klassisch (mit Index)
for (int i = 0; i < farben.length; i++) {
System.out.println(i + ": " + farben[i]);
}
// For-each (kein Index)
for (var farbe : farben) {
System.out.println(farbe);
}
Verwende for-each, wenn du keinen Index brauchst. Es ist kuerzer und sicherer (kein ArrayIndexOutOfBoundsException-Risiko).
Vergleich mit Python
# Python: for-in
namen = ["Max", "Anna", "Leo"]
for name in namen:
print(f"Hallo {name}!")
# Mit Index
for i, name in enumerate(namen):
print(f"{i}: {name}")
// Java: for-each
var namen = List.of("Max", "Anna", "Leo");
for (var name : namen) {
System.out.println("Hallo " + name + "!");
}
// Mit Index: klassische for-Schleife
for (int i = 0; i < namen.size(); i++) {
System.out.printf("%d: %s%n", i, namen.get(i));
}
break und continue
break — Schleife vorzeitig beenden
for (int i = 1; i <= 100; i++) {
if (i == 5) {
System.out.println("Gefunden bei " + i);
break; // Schleife sofort beenden
}
System.out.println("Suche bei " + i);
}
Ausgabe:
Suche bei 1
Suche bei 2
Suche bei 3
Suche bei 4
Gefunden bei 5
continue — Durchlauf ueberspringen
for (int i = 1; i <= 10; i++) {
if (i % 3 == 0) {
continue; // Rest ueberspringen, naechster Durchlauf
}
System.out.print(i + " ");
}
// Ausgabe: 1 2 4 5 7 8 10
Verschachtelte Schleifen
Schleifen koennen ineinander verschachtelt werden:
Multiplikationstabelle
for (int i = 1; i <= 10; i++) {
for (int j = 1; j <= 10; j++) {
System.out.printf("%4d", i * j);
}
System.out.println(); // Neue Zeile
}
Ausgabe:
1 2 3 4 5 6 7 8 9 10
2 4 6 8 10 12 14 16 18 20
3 6 9 12 15 18 21 24 27 30
...
Muster zeichnen
int groesse = 5;
for (int i = 1; i <= groesse; i++) {
for (int j = 1; j <= i; j++) {
System.out.print("* ");
}
System.out.println();
}
Ausgabe:
*
* *
* * *
* * * *
* * * * *
Break mit Labels
Bei verschachtelten Schleifen kannst du mit Labels die aeussere Schleife verlassen:
aussen:
for (int i = 0; i < 5; i++) {
for (int j = 0; j < 5; j++) {
if (i * j > 6) {
System.out.println("Abbruch bei i=" + i + ", j=" + j);
break aussen; // Bricht die AEUSSERE Schleife ab
}
}
}
Praktische Beispiele
Summe berechnen
var summe = 0;
for (int i = 1; i <= 100; i++) {
summe += i;
}
System.out.println("Summe 1-100: " + summe); // 5050
Fibonacci-Zahlen
int n = 15;
long a = 0, b = 1;
System.out.print("Fibonacci: ");
for (int i = 0; i < n; i++) {
System.out.print(a + " ");
long temp = a + b;
a = b;
b = temp;
}
// Ausgabe: Fibonacci: 0 1 1 2 3 5 8 13 21 34 55 89 144 233 377
Primzahl-Pruefung
int zahl = 29;
boolean istPrimzahl = zahl > 1;
for (int i = 2; i <= Math.sqrt(zahl); i++) {
if (zahl % i == 0) {
istPrimzahl = false;
break;
}
}
System.out.println(zahl + " ist Primzahl: " + istPrimzahl); // true
Array-Suche
var produkte = new String[]{"Laptop", "Maus", "Tastatur", "Monitor", "Headset"};
var suchbegriff = "Tastatur";
var gefunden = false;
for (int i = 0; i < produkte.length; i++) {
if (produkte[i].equals(suchbegriff)) {
System.out.println(suchbegriff + " gefunden an Position " + i);
gefunden = true;
break;
}
}
if (!gefunden) {
System.out.println(suchbegriff + " nicht gefunden!");
}
Typische Fehler
1. Off-by-one Error
var namen = new String[]{"Max", "Anna", "Leo"};
// FEHLER: ArrayIndexOutOfBoundsException
// for (int i = 0; i <= namen.length; i++) { }
// RICHTIG: < statt <=
for (int i = 0; i < namen.length; i++) {
System.out.println(namen[i]);
}
2. Endlosschleife
// ENDLOSSCHLEIFE -- vergessen, i zu erhoehen!
// for (int i = 0; i < 10; ) {
// System.out.println(i);
// }
// RICHTIG:
for (int i = 0; i < 10; i++) {
System.out.println(i);
}
3. Variable ausserhalb des Scopes
for (int i = 0; i < 5; i++) {
// i ist nur hier sichtbar
}
// System.out.println(i); // FEHLER! i existiert nicht mehr
Uebungen
Uebung 1: Zahlenreihe
Gib alle Zahlen von 1 bis 50 aus, die durch 3 oder 7 teilbar sind.
Uebung 2: Fakultaet
Berechne die Fakultaet einer eingegebenen Zahl (z.B. 5! = 5 * 4 * 3 * 2 * 1 = 120).
Uebung 3: Sternchen-Pyramide
Zeichne eine zentrierte Pyramide mit 7 Zeilen:
*
***
*****
*******
Uebung 4: FizzBuzz
Gib die Zahlen 1-100 aus. Fuer Vielfache von 3: “Fizz”, fuer 5: “Buzz”, fuer 15: “FizzBuzz”.
Was kommt als Naechstes?
In der naechsten Lektion lernst du while- und do-while-Schleifen — die Alternative zur for-Schleife, wenn du nicht weisst, wie oft eine Schleife laufen soll.
Zusammenfassung
- Die klassische for-Schleife hat drei Teile: Initialisierung, Bedingung, Update
- Die for-each-Schleife (
for (var x : collection)) ist ideal fuer Arrays und Collections breakbeendet die Schleife,continueueberspringt den Rest des Durchlaufs- Verschachtelte Schleifen sind moeglich, aber achte auf Performance
- Labels erlauben break/continue fuer aeussere Schleifen
- Achte auf Off-by-one-Errors (
<vs.<=)
Pro-Tipp: In IntelliJ kannst du fori + Tab tippen, um eine for-Schleife zu generieren, oder iter + Tab fuer eine for-each-Schleife. Das spart viel Tipparbeit! Und wenn du eine for-Schleife mit einer Collection siehst, pruefe, ob du sie durch Stream-Operationen wie .forEach(), .filter() oder .map() ersetzen kannst — das ist oft eleganter.