Java Reference
In-Depth Information
Erläuterung Das Programm entspricht zum großen Teil dem Lösungsprogramm aus Beispiel 2. Es
wird jedoch durch die Prozedur sammle erweitert. Wird diese ausgeführt, dann sammelt der Hamster
alle Körner ein, die auf der Kachel liegen, auf der er sich gerade befindet. Die Prozedur arbeitet dabei
unabhängig von der konkreten Anzahl an Körnern auf einer Kachel korrekt. Nehmen wir an, auf ei-
ner Kachel liegen sieben Körner. Dann ist die Schleifenbedingung kornDa() siebenmal erfüllt, d.h.
es wird insgesamt siebenmal der Befehl nimm(); ausgeführt. Nach dem siebten Schleifendurchlauf
hat der Hamster jedoch alle Körner der Kachel aufgenommen, sodass die Schleifenbedingung bei
ihrer achten Überprüfung nicht mehr erfüllt und damit die while-Anweisung beendet ist. Bei einer
Anzahl von 20 Körnern auf einer Kachel wird die Iterationsanweisung genau zwanzigmal ausge-
führt; allgemein bei n Körnern genau n -mal. Beachten Sie, dass die Prozedur sammle auch dann
korrekt arbeitet, wenn auf einer Kachel kein Korn liegt. Dann ist die Schleifenbedingung bereits bei
der ersten Überprüfung nicht erfüllt und der nimm(); -Befehl wird kein einziges Mal ausgeführt.
Die Prozedur sammle wird in der Iterationsanweisung der Prozedur laufeBisZurNaechsten-
WandUndSammle aufgerufen. Diese Prozedur bewirkt, dass jedes Mal, wenn der Hamster auf eine
neue Kachel springen kann, er dies auch tut und diese anschließend „abgrast“. Die Iterationsanwei-
sung der diesbezüglichen while-Anweisung innerhalb der Prozedur besteht daher aus einer Blockan-
weisung mit der Anweisungssequenz vor(); und sammle(); .
Achtung Achten Sie darauf, dass die Prozedur sammle ganz zu Anfang des Programms einmal
aufgerufen wird. Ohne diese Anweisung wäre das Programm nicht korrekt! Es würde nur bei solchen
Landschaften korrekt arbeiten, bei denen sich auf der Ausgangskachel des Hamsters keine Körner
befinden. Bei den anderen Landschaften würde der Hamster die Körner auf seiner Ausgangskachel
liegen lassen und damit nicht die komplette Aufgabenstellung erfüllen.
10.2.6 Geschachtelte Schleifen
Die Iterationsanweisung einer while-Anweisung kann selbst wieder eine while-Anweisung sein oder
eine while-Anweisung enthalten. Im folgenden Programm sammelt der Hamster alle Körner ein, die
er auf seinemWeg bis zur nächsten Wand in Blickrichtung vor ihm findet (ausgenommen die Körner
auf der letzten Kachel vor der Mauer):
void main() {
while (vornFrei()) {
while (kornDa()) {
nimm();
}
vor();
}
}
Derartige Konstruktionen nennt man geschachtelte Schleifen . Da sie gerade für Programmieranfän-
ger leicht unübersichtlich werden, sollten Sie sie anfangs vermeiden und stattdessen zunächst auf
die Verwendung von Prozeduren zurückgreifen:
void main() {
while (vornFrei()) {
sammle();
Search WWH ::




Custom Search