Felder durchlaufen
Felder und Schleifen gehören zusammen. Fast alles, was du mit einem Feld tust, folgt demselben Muster: einmal von vorne bis hinten durchgehen und dabei etwas tun.
Das Grundmuster
for (int i = 0; i < feld.length; i++) {
// hier steht feld[i] zur Verfügung
}
Diesen Kopf schreibst du von jetzt an ständig. Er beginnt bei 0 und läuft mit < bis length – so trifft er genau alle gültigen Indizes.
i < feld.length statt einer festen Zahl ist wichtig: Das Programm passt sich dann automatisch an, wenn das Feld länger wird.
Die verkürzte Form
Wenn du den Index gar nicht brauchst, sondern nur die Werte, gibt es eine kürzere Schreibweise.
for (String name : namen) liest sich als „für jeden Namen aus namen“. Diese Form heißt erweiterte for-Schleife oder for-each.
Sie ist kürzer und weniger fehleranfällig – aber du kannst damit:
- den Index nicht verwenden,
- nicht rückwärts laufen,
- die Werte im Feld nicht verändern.
Nimm sie, wenn du nur lesen willst. Sonst die normale Zählschleife.
Die drei Grundaufgaben
Fast jede Feldaufgabe ist eine Abwandlung von einer dieser drei.
1. Summieren (Akkumulator)
2. Extremwert suchen
Zwei Fragen zum Extremwert-Muster:
a) Warum startet die Schleife bei i = 1 und nicht bei i = 0?
b) Warum ist int groesstes = 0; als Startwert eine schlechte Idee? Gib ein Feld an, bei dem das falsche Ergebnisse liefert.
Auflösung
a) Weil groesstes schon mit punkte[0] belegt wurde. Den Wert mit sich selbst zu vergleichen wäre nicht falsch, nur überflüssig.
b) Bei einem Feld mit lauter negativen Werten, etwa {-5, -3, -9}. Dann bliebe groesstes bei 0, obwohl 0 gar nicht im Feld vorkommt.
Regel: Starte immer mit dem ersten Element des Feldes, nie mit einer ausgedachten Zahl.
3. Zählen
Felder in der Grafik
Das ist ein Säulendiagramm – und genau das, was in Kapitel 3 noch nicht ging, weil die Höhen keiner Regel folgen.
a) Ändere die Werte im Feld und beobachte das Diagramm.
b) Füge einen achten Wert hinzu. Was musst du sonst noch anpassen?
c) Färbe die Säule mit dem größten Wert rot ein.
Auflösung zu b)
Nichts. Die Schleife läuft bis hoehen.length, und die x-Koordinate wird aus dem Index berechnet. Das Programm passt sich von allein an.
Hättest du i < 7 geschrieben, müsstest du es ändern. Deshalb ist feld.length die bessere Wahl.
Tipp zu c)
Bestimme in einem ersten Durchlauf den größten Wert. Färbe dann in einem zweiten Durchlauf die passende Säule anders. Zwei einfache Schleifen sind übersichtlicher als eine komplizierte.
Aufgabe: Getestete Feldmethoden
Ergänze die vier Methoden so, dass alle Tests grün werden. Sie sind die Werkzeuge, die du im Rest des Lernpfads immer wieder brauchst.
Tipp 1: Die Muster
Du brauchst kein neues Wissen. summe ist der Akkumulator, maximum die Extremwertsuche, zaehle das Zählmuster. mittelwert darf summe aufrufen – Methoden dürfen einander benutzen.
Tipp 2: Der Testfall mit dem leeren Feld
Bei summe(new int[]{}) läuft die Schleife null Mal. Wenn du mit int summe = 0; startest, kommt genau 0 heraus – der Testfall geht also von allein durch, wenn dein Muster stimmt.
Bei maximum wäre das leere Feld ein Problem, deshalb ist es dort ausdrücklich ausgeschlossen.
Tipp 3: Der Mittelwert
summe(pWerte) liefert ein int, pWerte.length ebenfalls. Ohne Typumwandlung bekommst du eine Ganzzahldivision – und der Testfall mit 1,5 schlägt fehl.
Zusatzaufgabe
Schreibe eine Methode umgekehrt(int[] pWerte), die ein neues Feld mit denselben Werten in umgekehrter Reihenfolge zurückgibt.
Anschließend: Schreibe eine zweite Methode drehe(int[] pWerte), die das übergebene Feld selbst umdreht, ohne ein neues anzulegen.
Probiere beide aus und beobachte, was mit dem ursprünglichen Feld passiert. Diese Beobachtung führt direkt zum Thema Referenzen, das dich im Lernpfad Erweiterungen erwartet.