Wir nutzen im Informatikunterricht das Programm Greenfoot. Kann mir da jemand bei einer Programmierfrage helfen?
Ich fange gerade an im Informatikunterricht das Programm Greenfoot kennenzulernen. Meine Aufgabe ist es ein Roboter, wenn er eine Wand vor sich hat, dass er dies auch selbstständig merkt und ansonsten weitergeht. Das habe ich schon mal programmiert:
public void act if (wandVorne()) {umWandGehen();} else {bewegen();}
(ist natürlich in echt untereinander)
"umWandGehen" ist einfach, dass der Roboter einmal rum um die Wand und dann weiter gerade ausgeht, als ob es keine Wand gegeben hätte.
Wie schaffe ich es jetzt, dass ich beim drücken von "Act" den Roboter vom einem Ende zum anderen Ende befördern kann? Ich bitte um Berichtigungen. Bitte nicht nur sagen was falsch ist! Denkt bitte auch dran, dass das erst meine vierte Stunde war!
Danke
mariayy
1 Antwort
![](https://images.gutefrage.net/media/default/user/6_nmmslarge.png?v=1438863662000)
Ich kenne leider weder das Programm, noch die Funktionsweise.
Es fehlen leider ein paar Angaben wie: Welche Fehler werden ausgegeben, oder gibt es Fehler? Macht der Roboter überhaupt etwas wenn Act gedrückt wird oder macht er nur etwas Falsches?
Ein paar Sachen, die dennoch auffallen: Der Block einer Methode muss in {}, nach void <name> müssen die Parameter in () übergeben werden und wenn act nur einmal aufgerufen wird und bewegen() den Roboter nur ein Stück nach vorne bewegt, muss die if-Bedingung in eine Schleife, damit nach jedem Schritt überprüft wird, ob eine Wand vor dem Roboter ist.
Der Code könnte dann etwa so aussehen:
public void act(){ while(true){ if(wandVorne()){ umWandGehen(); } else{ bewegen(); } } }
Es kann natürlich auch eine andere Schleife/Schleifenbedingung verwendet werden.
Ich hoffe, dass ich dir helfen konnte, falls nicht, kannst du gerne nochmal nachfragen ;)
![](https://images.gutefrage.net/media/default/user/6_nmmslarge.png?v=1438863662000)
Ja, while ist eine Schleife.
Leider fällt mir als zweite Lösung nur Rekursion ein, was man auch als eine Art Schleife bezeichnen könnte.
Rekursion wäre:
else{ bewegen(); act(); }
Wenn act allerdings nur einmal aufgerufen wird und bewegen() den Roboter nur ein Stück nach vorne bewegt ist die Aufgabe ohne Schleife oder Rekursion nicht lösbar.
Danke