Java Reference
In-Depth Information
12.7.3 Entwurf
Eine intuitive Lösungsidee hat folgende Gestalt: Der Hamster soll die Reihe „abgrasen“, in der er
sich gerade befindet. Anschließend soll er testen, ob sich nördlich von ihm noch eine weitere Reihe
befindet. Wenn ja, soll er sich in diese Reihe begeben und diese Reihe abgrasen. Dieser Vorgang soll
solange wiederholt werden, bis der Hamster die nördliche Begrenzungswand erreicht.
In der Hamster-Sprache wird diese Lösungsidee folgendermaßen formuliert:
/*
* der Hamster soll einzelne Koernerreihen abgrasen,
* solange noch weitere Reihen existieren
*/
void main() {
ernteEineReihe();
while (weitereReiheExistiert()) {
begibDichInNaechsteReihe();
ernteEineReihe();
}
}
/*
* der Hamster soll alle Koerner in einer Reihe einsammeln
*/
void ernteEineReihe() { }
/*
* der Hamster soll sich in die naechste Reihe in noerdlicher
* Richtung begeben
*/
void begibDichInNaechsteReihe() { }
/*
* Ueberpruefung, ob in noerdlicher Richtung eine weitere nicht
* mit Mauern besetzte Reihe existiert
*/
boolean weitereReiheExistiert() { }
Während die Implementierung der Prozedur ernteEineReihe relativ einfach ist, stoßen wir bei
der Implementierung der Prozedur begibDichInNaechsteReihe und der booleschen Funktion
weitereReiheExistiert auf ein Problem. Es macht nämlich einen Unterschied, ob der Hamster
eine Reihe von links oder von rechts abgrast. Mit den bisher bekannten Sprachkonstrukten können
wir diesen Konflikt innerhalb der booleschen Funktion nicht lösen. Das war auch der Grund, warum
die Aufgabe in Kapitel 10.4.1 relativ umständlich derart gelöst worden ist, dass der Hamster nach
dem Abgrasen einer Reihe zunächst die Reihe wieder zurücklaufen musste.
Wir können zwar unsere erste Lösungsidee beibehalten, müssen jedoch bei der Übertragung der Idee
in die Hamster-Sprache sorgfältiger die verschiedenen Richtungsalternativen unterscheiden:
Search WWH ::




Custom Search