Jedes Element genau einmal
Ein Handballteam notiert die Tore seiner letzten sechs Spiele. Jede Auswertung muss jedes Element einmal ansehen — das erledigt eine Zählschleife, deren Zähler zugleich der Index ist.
int[] tore = {27, 31, 24, 29, 33, 26};
for (int i = 0; i < tore.length; i++) {
System.out.println("Spiel " + (i + 1) + ": " + tore[i]);
}
- Zählschleife:
iläuft von 0 bistore.length− 1 und dient als Index. - Bedingung:
i < tore.length— beii = 6endet die Schleife, bevortore[6]gelesen wird. - Rückwärts:
for (int i = tore.length - 1; i >= 0; i--)beginnt beim letzten Element. - Struktogramm:Zählschleife mit dem Kopf „für i von 0 bis Länge von tore − 1“.
Wer nur lesen will, kommt ohne Index aus: Die for-each-Schleife liefert nacheinander jeden Wert.
for (int t : tore) { // „für jedes t in tore“
System.out.println(t);
}
- for-each:durchläuft alle Elemente von vorn nach hinten; der Index bleibt verborgen.
- Nur lesen:
tist eine Kopie des Elements —t = 0;ändert nur die Kopie, die Reihung bleibt gleich. - Index nötig:zum Schreiben, für Positionen oder für Nachbarn wie
tore[i + 1]→ Zählschleife.
Zählschleife: for (int i = 0; i < a.length; i++); i läuft von 0 bis a.length − 1 und ist zugleich der Index. Bei i = a.length endet die Schleife, bevor gelesen wird.
Rückwärts: for (int i = a.length - 1; i >= 0; i--) beginnt beim letzten Element.
for-each: for (int t : a) liefert nacheinander jeden Wert; t ist nur eine Kopie, die Reihung ändert sich nicht.
Index nötig: zum Schreiben, für Positionen oder für Nachbarn wie a[i + 1] → Zählschleife.
Summe, Maximum, Anzahl
Fast jede Auswertung folgt demselben Muster: Ergebnisvariable vorbereiten, Reihung durchlaufen, Ergebnis bei jedem Element aktualisieren.
int summe = 0;
for (int i = 0; i < tore.length; i++) {
summe = summe + tore[i];
}
double schnitt = (double) summe / tore.length; // 28.33...
- Summe:Startwert 0, in jedem Durchlauf
summe = summe + tore[i]; - Mittelwert:Summe geteilt durch
tore.length— Achtung bei zweiint-Werten. - Maximum:Startwert
tore[0], Schleife abi = 1; isttore[i] > max, wirdmax = tore[i]; - Minimum:genauso, nur mit
tore[i] < min. - Zählen:Startwert 0;
anzahl++nur, wenn die Bedingung gilt, z. B.tore[i] >= 30.
double, bleibt der Nachkommaanteil erhalten.Wähle oben einen Algorithmus und führe die Schleife mit „Einzelschritt“ oder ▶ aus. Beobachte den Zeiger i, die markierte Codezeile und die wachsende Tracetabelle. Ändere dann einen Wert (Kästchen anklicken, dann ↑/↓ oder „Wert −1“/„Wert +1“) und sage vorher, wie sich das Ergebnis ändert.
Halte fest: Die Schleife endet mit i = tore.length — dieser Index wird nur geprüft, nie gelesen. Das Maximum braucht bei n Elementen genau n − 1 Vergleiche, weil tore[0] schon der Startwert ist.
Muster: Ergebnisvariable vorbereiten, Reihung durchlaufen, Ergebnis bei jedem Element aktualisieren; for (int i = 0; i < a.length; i++) besucht jedes Element genau einmal.
Summe und Zähler: Startwert 0; Summe: summe = summe + a[i];; Zählen: anzahl++ nur, wenn die Bedingung gilt.
Mittelwert: Summe geteilt durch a.length; bei zwei int-Werten vorher mit (double) umwandeln.
Maximum und Minimum: Startwert a[0], Schleife ab \(i=1\); Maximum bei a[i] > max ersetzen, Minimum bei a[i] < min. Das Maximum braucht \(n-1\) Vergleiche.
Allgemeine Hinweise
< statt <=
Mit i <= tore.length läuft die Schleife einmal zu oft und liest tore[6] — Abbruch mit ArrayIndexOutOfBoundsException. Die Länge selbst ist nie ein gültiger Index.
Maximum nicht mit 0 starten
Bei lauter negativen Werten, etwa Meerestiefen unter null, bliebe max = 0 stehen, obwohl 0 gar nicht vorkommt. Der erste Wert a[0] ist immer ein sicherer Startwert.
Drei Fragen vor dem Code
Womit startet das Ergebnis? Was passiert bei jedem Element? Was steht am Ende fest? Wer diese Fragen beantwortet, schreibt Struktogramm und Java fast von selbst.
