Hamstersimulator mit Wiederholungsanweisungen

tpdort

Neues Mitglied
Der Hamster, der genau ein Korn in seinem Maul hat, befindet sich in einem geschlossenen, körnerlosen Raum unbekannter Größe. Rechts von ihm befindet sich eine Wand und vor ihm die Kachel ist frei. Der Hamster soll solange gegen den Uhrzeigersinn an der Wand entlanglaufen, bis er irgendwann wieder seine Ausgangskachel erreicht. Testen Sie Ihr Programm auch mit anderen Territorien.
Also, ich habe versucht, den Hamster durch alle Kacheln laufen zu lassen, kriegte aber einen Fehler. Wenn er entlang der Wand läuft, verpasst er zwei Kacheln, die nicht gegen die Wand sind.
Kann jemand mir bitte helfen, wie ich diese verbessern kann?


1664053899787.png



void main() {
while (!kornDa() ) {
while ( !rechtsFrei() ) {
if (vornFrei() ) {
vor();
}
else linksUm();
}
while (rechtsFrei() ) {
if (vornFrei() ) {
vor();
}
}
}
}


boolean rechtsFrei() {
rechtsUm();
if (vornFrei() ) {
vor();
return true;
}
else linksUm();
return false;
}

void rechtsUm() {
linksUm();
linksUm();
linksUm();
}

void kehrt() {
linksUm();
linksUm();
}


 

mihe7

Top Contributor
Im Prinzip ist der Code doch gar nicht schlecht. Wenn man die Idee aufgreift, dass die Methode rechtsFrei() nicht nur prüft, ob rechts frei ist sondern ggf. gleich die Bewegung ausführt, könnte man das auf die anderen Richtungen übertragen und andere Methodennamen verwenden. Man muss sich im Klaren sein, dass auch links eine Wand sein kann, wenn rechts und vorne eine Wand ist. In dem Fall muss man natürlich umdrehen. Außerdem braucht es die inneren while-Schleifen nicht:

Java:
while (!kornDa()) {
    if (!geheRechts()) {
       if (!geheVor()) {
           if (!geheLinks()) {
               geheZurueck(); // dreht den Hamster um 180° und geht einen Schritt nach vorne
           }
       }
    }
}
 

tpdort

Neues Mitglied
Deine Lösung sind super cool. Ich habe mir überlegt, wie ich while-Schleife sparen konnte. Jetzt finde ich noch heraus, dass die Aufgabe nur verlangt, dass es der Wand entläuft, nicht durch alle Kacheln.
Die schwere Aufgabe ist, wenn die Maus kein Korn im Maul hat, um abzulegen und er den Rückweg finden muss, braucht er x, y Achse wie in Mathe😄😄😄 und auch ihre Blickrichtung.
Danke danke!
 

mihe7

Top Contributor
Genau genommen ist das Deine Lösung. Ich habe nur den Code umgeschrieben und um den Fall erweitert, dass rechts, vorne und links eine Mauer ist. Darfst Dir also selbst auf die Schulter klopfen :)

Was die andere Aufgabe betrifft: richtig, Du musst horizontale und vertikale Schritte je nach Richtung addieren und subtrahieren. Den Ausgangspunkt legst Du als (0,0) fest und merkst ihn Dir mit zwei Variablen, z. B. x und y. Die Richtung kannst Du Dir als (Einheits-)Vektor vorstellen, dafür nimmst Du ebenfalls zwei Variablen, z. B. dx und dy, die Du z. B. mit (1,0) initialisierst. Beim Drehen aktualisierst Du die Richtung (nimm Papier und Stift und schreib Dir die Möglichkeiten auf) und beim Vorwärtsgehen addierst Du einfach die Paare, damit Du den neuen Punkt des Hamsters erhältst: (x + dx, y + dy). Da Du das meiste eh schon in einzelnen Methoden hast, sind das ein paar kleine Änderungen, für das Vorwärtsgehen wäre noch eine Methode einzuführen.

Im "normalen Java" würde man übrigens "vernünftige Typen" für Position und Richtung einführen, aber ich denke, das geht hier zu weit.
 
Zuletzt bearbeitet:

Ähnliche Java Themen

Neue Themen


Oben