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.
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.
for (int i = 0; i < a.length; i++) besucht jedes Element genau einmal · Startwert Summe und Zähler: 0 · Startwert Maximum und Minimum: a[0]
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.
