Lernpfad:Lerntheke Marsrover/20

Aus Informatik-Box
Zur Navigation springen Zur Suche springen
Fallunterscheidungen I

Bei der Programmierung kommt es häufig vor, dass der weitere Ablauf des Programms von einer Entscheidung abhängt. Zum Beispiel:

Wenn vorne kein Hügel ist
dann fahre,
sonst drehe rechts

oder

WENN gesteinVorhanden()
DANN analysiereGestein()
SONST setzeMarke()

Solche Verzweigungen oder Fallunterscheidungen kennst du auch schon von Programmablaufplänen:

PAP Karte20 Verzweigung.png

Der Rover kann schon einige Entscheidungen treffen. Dazu besitzt der Rover sogenannte Anfragen.

Greenfoot Rover.png
Arbeitsauftrag
  1. Lade eine Zufallswelt und platziere den Rover an verschiedenen Stellen. Rufe mit einem Rechtsklick auf den Rover das Menü auf. Die Anfragen des Rovers fangen mit boolean an.
    Probiere die Anfragen des Rovers aus und finde heraus, was sie überprüfen.
Lösung
  • boolean huegelVorhanden( richtung ) - Prüft, ob in der angegebenen Richtung ein Hügel vorhanden ist.
  • boolean gesteinVorhanden() - Prüft, ob auf dem aktuellen Feld des Rovers ein Gestein vorhanden ist.
  • boolean markeVorhanden() - Prüft, ob auf dem aktuellen Feld des Rovers eine Marke vorhanden ist.


Möchtest du selber eine Verzweigungen in Java programmieren, dann benutzt du eine Bedingten Anweisung:

if( gesteinVorhanden() ) {
  analysiereGestein();
} else {
  setzeMarke();
}
Icon Heft.png
Arbeitsauftrag
  1. Analysiere den Quelltext oben und stelle Vermutungen über die Bedeutung der Schlüsselwörter if und else. Notiere dir Stichpunkte im Heft.
  2. Vergleiche deine Vermutungen mit dem Text im Buch auf Seite 48.


Greenfoot Rover.png
Arbeitsauftrag

Lade für die Aufgaben die unten gezeigte Karte.

  1. Implementiere in der act()-Methode einen Algorithmus, der den Rover bis zum nächsten Hügel vorwärts fahren lässt.
  2. Erweitere den Algorithmus so, dass der Rover auf dem Weg alle Gesteine analysiert.
  3. Erweitere das Programm so, dass auf allen Feldern ohne Gestein eine Marke abgelegt wird.
Kartendaten:
".\n.\n.\n.\n.\n.R..[.G].[.G][.G][.G][.GH][.GH][.G][.G]H"
Lösung
    public void act() {
        if( gesteinVorhanden() ) {
            analysiereGestein();
        } else {
            setzeMarke();
        }
        if( huegelVorhanden("vorne") ) {
            // leer
        } else {
            fahre();
        }
    }