Variablen boolean-wert wird nicht gesetzt

thoff430

Mitglied
Hallo miteinander,

ich wollte schon eine geraume Zeit mit dem Programmieren beginnen...und jetzt habe ich endlich einen Java-Kurs an meiner Uni. Wir arbeiten mit GreenFoot, hab selbst aber auch schon ein wenig Erfahrung im Umgang mit Eclipse gesammelt. Stehe trotzdem noch ziemlich am Anfang... und habe folgendes Problem:

Das Huhn soll in die obere rechte Ecke laufen, Schritt für Schritt, falls es da nicht bereits ist.
Mein Plan war jetzt durch die Variable reachedNBorder dem Huhn mitzuteilen, dass es bereits dort angekommen ist. Dadurch möchte ich verhindern, dass es sich wieder dem Norden zuwendet, nachdem es sich, bereits angekommen, nach Osten dreht. Aber wenn die obere Grenze erreicht ist wird weder reachedNBorder auf false gesetzt, noch dreht das Huhn sich nach rechts.
Mir geht es jetzt nicht um die optimalste Lösung für die Aufgabe (nach oben rechts gehen), sondern nur um das eben beschriebene Problem. Ich find die Lösung nicht, was übersehe ich?





Java:
/**
     * Lets Chicken walk to the 
     * upper right corner
     */
    public void goToURCorner() {
        if (getX() != 7 && getY() != 0) {
            if (! facingNorth() && ! reachedNBorder) {
                switch (direction) {
                    case EAST:
                        turnLeft();
                        break;
                    case SOUTH:
                        turn();
                        break;
                    case WEST:
                        turnRight();
                        break;
                }            
            }
            if (canMove()) {
                move();
            } else if (getY() == 0 && ! reachedEBorder){
                reachedNBorder = true;
                turnRight();
            }       
        }
    }
 
Wenn er "nur" nach oben rechts in die Ecke soll... Warum machst du dann keine 2 For-Schleifen?

1.: for (int i = getY(); i > 1; i--) {
//Hier kommt der Befehl hin, wodurch er nach Norden läuft
}
for (int i = getX(); i < 8; i++) {
//Hier kommt der Befehl hin, wodurch er nach Osten läuft
}


1.
getX() != 7
Müsste da nicht 8 hin? Oben links ist Feld 1/1, unten Rechts 8/8??

Und dementsprechend dann auch hier:
getY() == 0 auf 1.... aber kann mich auch irren.
 
Hatten bis jetzt im Kurs noch keine for-Schleifen, werd sie aber trotzdem mal einbauen (habs auch schon so mit dem switch gemacht...).

Das Kästchen ganz oben links ist (0, 0), das stimmt schon soweit.

edit: Habs eingebaut, funktioniert auch nicht so, wie es sollte. Das Huhn geht dann in einem Schritt bis zur Ecke, anstatt in Einzelschritten. Wenn act() aufgerufen wird, soll das Huhn nur einen Schritt gehen.
 
Zuletzt bearbeitet:
Das zum Lernen von Java immer gleich irgendwelche Logo ähnlichen APIs herangezogen werden müssen, ist mir persönlich stets ein Rätsel. Durch das Javabuch von G. Krüger und der Insel lernt man meines Erachtens viel mehr und ausserdem viel schneller. Immerhin: GreenFoot scheint schon mal besser als JavaKara.

Zum Problem: Wenn das Huhn bereits rechts startet, kann reachedNBorder niemals true werden. Ebenso verhält es sich immer dann, wenn das Huhn die rechte Seite zuerst erreicht.
Da mir auch GreenFoot völlig fremd ist (und dies auch bleiben wird 😉) hier mal bissl' Pseudocode
Code:
goUpperRight()
{
  int x = getX();
  int y = getY();
  bool reachedNBorder = y == 0;
  bool reachedEBorder = x == 7;
  bool turned = false;
  bool moveable = !(reachedNBorder && reachedEBorder);

  if(moveable) {
    if(!reachedNBorder) {
      if(!facingNorth()) {
        turnNorth(); // abgekürzt
      }
    }
    else if(!turned) {
      turnRight();
      turned = true;
    }
    move();
  }
}
 
Zuletzt bearbeitet von einem Moderator:
Dass wir schon Code schreiben ist schon was neues, im Prinzip geht es erstmal darum das Prinzip der objektorientierten Programmierung zu verinnerlichen. "Richiges" Java kommt schon früh genug (ich hab schon einige Kleinigkeiten in Eclipse geübt mit Hilfe von Java for Dummies 😀 .

Ich bin die Sache inzwischen anders angegangen, stoße da aber auf weitere Probleme...siehe anderen Thread.
 

Zurück
Oben