Eine Reihung durchlaufen
Fast jeder Algorithmus auf einer dynamischen Reihung besucht die Elemente der Reihe nach — mit einer Zählschleife über alle gültigen Indizes.
- Durchlauf:Laufvariable i von 0 bis
getLength() - 1, Zugriff mitgetItem(i). - Summe, Anzahl:Variable vor der Schleife anlegen, in jedem Durchlauf anpassen, danach zurückgeben.
- Suchen:beim ersten Treffer sofort den Index zurückgeben — nach der Schleife −1 für „nicht enthalten“.
- Maximum:mit
getItem(0)starten, ab Index 1 vergleichen und bei Bedarf ersetzen.
int summe = 0;
for (int i = 0; i < punkte.getLength(); i++) {
summe = summe + punkte.getItem(i);
}
public int indexVon(DynArray<String> liste, String gesucht) {
for (int i = 0; i < liste.getLength(); i++) {
if (liste.getItem(i).equals(gesucht)) {
return i; // gefunden: sofort zurück
}
}
return -1; // nicht enthalten
}
Elemente in der Schleife löschen
Gelöscht wird oft nicht ein einzelnes Element, sondern alle, die eine Bedingung erfüllen — etwa alle Bewertungen unter 5 Punkten. Genau hier steckt eine Falle.
- Problem:nach
delete(i)rückt das nächste Element auf Index i — das anschließendei++springt darüber hinweg. - Lösung 1:rückwärts laufen — verschoben werden dann nur Elemente, die schon geprüft sind.
- Lösung 2:
while-Schleife, die i nur erhöht, wenn nichts gelöscht wurde.
Wähle eine Variante und lass die Schleife mit ▶ laufen oder gehe mit „Schritt“ einzeln vor. Die Tracetabelle wächst mit. Vergleiche das Ergebnis der drei Varianten.
Halte fest: Die Vorwärts-Schleife überspringt nach jedem Löschen ein Element. Rückwärts laufen oder i nur ohne Löschen erhöhen liefert immer das richtige Ergebnis.
Löschen in einer Schleife: von hinten nach vorn laufen — for (int i = liste.getLength() - 1; i >= 0; i--)
Allgemeine Hinweise
< statt <=
Die Schleifenbedingung lautet i < liste.getLength(). Mit <= greift der letzte Durchlauf auf einen Index zu, den es nicht gibt.
Texte mit equals
Zeichenketten vergleicht man mit equals, nicht mit ==. Sonst wird geprüft, ob es dasselbe Objekt ist, nicht ob der Text gleich ist.
Tracetabelle führen
Eine Spalte für i, eine für die Reihung, eine für die Bedingung: So fallen übersprungene Elemente sofort auf — auch in der Klausur.
