Java Reference
In-Depth Information
Funktion aufgerufen: Der Hamster dreht sich um 90 Grad nach links (b), testet, ob nun vor ihm frei
ist; das ist nicht der Fall, also dreht er sich wieder um 90 Grad nach rechts (c-e) und liefert den
Wert false . Durch die anschließende Negierung ist die Schleifenbedingung insgesamt erfüllt und
die Iterationsanweisung wird ausgeführt, d.h. der Hamster hüpft eine Kachel nach vorne (f). Nun
wird die Schleifenbedingung ein weiteres Mal überprüft. Da dieses Mal aber bereits der Testbefehl
vornFrei() den Wert false liefert, muss die Funktion linksFrei nicht ein zweites Mal aufge-
rufen werden. Die Schleifenbedingung kann nicht mehr erfüllt werden. Die Funktion linksFrei
wird dann jedoch für die Auswertung der Bedingung der if-Anweisung erneut aufgerufen (g-k). Sie
liefert den Wert true , sodass die Bedingung erfüllt ist und sich der Hamster in die Nische begibt
(l-m).
Drehen Sie nun einmal die konjugierten Ausdrücke in dem Beispiel um und führen Sie das Pro-
gramm erneut für die in Abbildung 11.6 skizzierte Situation aus. Sie werden feststellen, dass der
Hamster einmal mehr testet, ob sich links von ihm eine Mauer befindet.
void main() {
// Vertauschung der Operanden
while (!linksFrei() && vornFrei()) {
vor();
}
if (linksFrei()) {
linksUm();
vor();
}
}
boolean linksFrei() {
linksUm();
if (vornFrei()) {
rechtsUm();
return true;
} else {
rechtsUm();
return false;
}
}
void rechtsUm() {
linksUm();
linksUm();
linksUm();
}
11.5 Seiteneffekte
Der Unterschied zwischen Prozeduren und booleschen Funktionen besteht nach außen hin darin,
dass Prozeduren etwas tun, indem sie den Zustand des Hamsters (Blickrichtung, Position, Körneran-
zahl im Maul) oder der Hamster-Landschaft (Körneranzahl auf den einzelnen Kacheln) verändern,
Search WWH ::




Custom Search