Die Sequenz Die Auswahl Die Wiederholung
Kara soll von seiner aktuellen Position bis zur Wand laufen. |
/** Kara soll zur nächsten Wand laufen */ public void myProgram() { kara.move(); kara.move(); kara.move(); kara.move(); } |
Diese Aufgabenstellung birgt gleich mehrere Probleme:
Struktogramm |
/*Umsetzung der kopf- gesteuerten Wieder- holung in Java */ while (Bedingung erfüllt){ Anweisungen; } |
/*Kara kann von einer beliebigen Position zur Wand laufen */ while (!kara.treeFront()){ kara.move(); } |
Zunächst wird geprüft, ob eine Bedingung für den Eintritt in die Wiederholung erfüllt ist. Nur dann werden die folgenden Anweisungen ausgeführt. Ist deren Ausführung beendet, wird die Eintrittsbedingung erneut geprüft. Dieser Vorgang wiederholt sich so lange, bis die Eintrittsbedingung nicht mehr erfüllt ist.
Da die Bedingung vor Eintritt in die Wiederholung geprüft wird, kann es passieren, dass die Wiederholungsanweisungen gar nicht ausgeführt werden.
Im konkreten Beispiel wird als Eintrittsbedingung eine Methode benutzt, die angibt, ob vor
Kara ein Baum steht (!kara.treeFront(), das ! negiert das Ergebnis, was der Frage entspricht,
ob kein Baum vor Kara steht).
Das Prüfen dieser Bedingung vor Eintritt in die Wiederholung ist sehr wichtig. Falls Kara
nämlich direkt vor einem Baum stehen sollte, würde er sich schon mit dem ersten Schritt den
Kopf einrennen.
Es kann bei Wiederholungen gefordert sein, dass zunächst Anweisungen auszuführen sind, aus denen sich ergibt, ob eine Bedingung erfüllt ist. Ein Beispiel hierfür ist eine Passworteingabe. Man muss erst ein Passwort eingeben, bevor man dessen Richtigkeit überprüfen kann. Bei fehlerhaftem Passwort wird die Eingabe wiederholt.
Struktogramm |
/*Umsetzung der fuß- gesteuerten Wieder- holung in Java */ do { Anweisungen; } while (Bedingung erfüllt); |
/*Kara kann von einer beliebigen Position zur Wand laufen */ do { kara.move(); } while (!kara.treeFront()); |
Im Unterschied zur kopfgesteuerten Wiederholung gibt es hier eine Austrittsbedingung. Die Schleife kann erst verlassen werden, wenn die Bedingung nicht mehr erfüllt ist. Da die Bedingung erst am Ende der Wiederholung geprüft wird, ergibt sich, dass die Anweisungen der fußgesteuerten Wiederholung mindestens einmal durchlaufen werden.
Im konkreten Beispiel ist die Wahl der fußgesteuerten Wiederholung ungünstig. Steht Kara beim Start bereits vor einem Baum, macht er erst einen Schritt, bevor er seine Lage überprüft. Eine Verletzung ist vorprogrammiert.
Der Vollständigkeit halber sei hier noch die gezählte Wiederholung oder Zählschleife genannt (der Fachmann spricht von einer definiten Wiederholung). Sie wird meist dort eingesetzt, wo die Anzahl der Wiederholungen im Vorfeld bereits bekannt ist.
Struktogramm |
/*Umsetzung der gezählten Wiederholung in Java */ for(Startwert;Gültigkeitsbedingung;Rechenregel) { Anweisungen; } |
/*Kara soll genau 4 Schritte machen */ int i; for(i=1;i<=4;i=i+1) { kara.move(); } |
Eine Variable i wird mit dem Startwert 1 belegt. Es wird geprüft, ob i kleiner oder gleich 4 ist.
Da die Gültigkeitsbedingung erfüllt ist, gelangt man in den Anweisungsteil und Kara läuft
einen Schritt.
Sind alle Anweisungen abgearbeitet, wird die Rechenregel angewendet. Hier wird i um 1 erhöht.
Nun wird erneut die Gültigkeitsbedingung geprüft.
Die Wiederholung läuft 4 mal. Die Varialble i hat nach der 4. Runde den Wert 4. Durch die
Rechenregel wird der Wert von i auf 5 erhöht. Nun ist die Gültigkeitsbedingung nicht mehr erfüllt.
Die Abarbeitung der Zählschleife wird beendet.
Im Unterschied zu anderen Programmiersprachen werden in Java alle Wiederholungen abgearbeitet, solange die Bedingung erfüllt ist.