JavaKara RandomWalk

Joptionpane

Aktives Mitglied
Abend alle, übe die Grundlagen bissle mit JavaKara und hab da ein Problem:

Aufgabe ist: Eine Welt ist vorgegeben, umzingelt von Bäumen und innendrin ist alles voll mit Kleeblättern.
Kara(Der Marienkäfer) ist irgendwo mittendrin.

Am anfang soll der Benutzer eine Zahl angeben wieviel Schritte Kara hinterlegt (soweit so gut).

Jetzt soll Kara nach dem "Random Walk" verfahren die Blätter aufsammeln (Eine art Roboter).

bei mir läuft alles, jedoch hab ich es nur so programmiert, dass Kara solange geradeaus läuft, bis ein Baum vorihm ist, dann dreht es sich nach Links um, wenn vor ihm & links von ihm einer ist dreht er sich nach rechts und vor ihm & rechts von ihm einer ist, dreht es sich nach links.
Dadurch entsteht eigtl. immer ein Rechteck beim lauf!

Kann mir da jemand helfen?

Hier mein Code:
Java:
import javakara.JavaKaraProgram;
        
/* BEFEHLE:  kara.
 *   move()  turnRight()  turnLeft()
 *   putLeaf()  removeLeaf()
 *
 * SENSOREN: kara.
 *   treeFront()  treeLeft()  treeRight()
 *   mushroomFront()  onLeaf()
 */
public class Randomwalk extends JavaKaraProgram {


  public void myProgram() {
   
     int x;
  x = tools.intInput("Bitte Anzahl Schritte angeben");

   for (int i= 1; i<=x; i++){
   kara.move(); 
  
     if (kara.onLeaf()){
         kara.removeLeaf();
     }
     
   
     
    if (kara.treeFront() && kara.treeLeft()){
        kara.turnRight();
    }
    
    
    if (kara.treeFront() && kara.treeRight()){
        kara.turnLeft();
    }
    
    
    if (kara.treeFront()&& !kara.treeRight()){
        kara.turnLeft();
    }
        if (kara.treeFront()&& !kara.treeLeft()){
        kara.turnRight();
    }
    
      }
   
    
  }
  
}
 

Marco13

Top Contributor
"Random" ist da jetzt ja noch nicht drin... Eine Möglichkeit wäre, bei jedem Schritt zufällig zu entscheiden, was man macht: Noch einen Schritt laufen (falls möglich) oder sich um 90° drehen. Schau mal ob du eine Instanz der Klasse java.util.Random dort unterbringen kannst, und dann GROB sowas wie
Java:
int action = random.nextInt(3);
if (action == 0) walk();
else if (action == 1) turnLeft();
else if (action == 2) turnRight();
(noch mit Abfragen ob dort frei ist...)
 

Joptionpane

Aktives Mitglied
danke schonmal,

kenne mich leider mit JavaKara net so gut aus,

der import funzt, gibts also,
jedoch kommt ein error, wenn ich int a = random.nextInt(3); in die for-Schleife reinsetzte:

error: can not find the symbol int a = random.nextInt(3);

aber soweit wäre die Idee super.
 

Joptionpane

Aktives Mitglied
so, habs jetzt mit dem Random hingekriegt :)

Jedoch ist jetzt das Problem mit den Bäumen, falls ein Baum vorm Kara ist hört es auf, sprich es dreht sich nicht mehr um...

ist wohl jetzt ne Sache der Klammern. Kann mir da jemand weiterhelfen?


Java:
import javakara.JavaKaraProgram;
import java.util.Random;

/* BEFEHLE:  kara.
 *   move()  turnRight()  turnLeft()
 *   putLeaf()  removeLeaf()
 *
 * SENSOREN: kara.
 *   treeFront()  treeLeft()  treeRight()
 *   mushroomFront()  onLeaf()
 */
public class Scheinaufgabe16 extends JavaKaraProgram {

	public void myProgram() {

		int x;
		x = tools.intInput("Bitte Anzahl Schritte angeben");

		for (int i = 1; i <= x; i++) {
			
			int a = (int) (Math.random() * 3 + 1);

			if (a == 1)
				kara.move();
			if (a == 2) {
				kara.turnLeft();
				kara.move();
			}
			if (a == 3) {
				kara.turnRight();
				kara.move();
			}

			if (kara.onLeaf()) {
				kara.removeLeaf();
			}

            if (kara.treeFront() && kara.treeLeft()) {
				kara.turnRight();
			}

			if (kara.treeFront() && kara.treeRight()) {
				kara.turnLeft();
			}

			if (kara.treeFront() && !kara.treeRight()) {
				kara.turnLeft();
			}
			if (kara.treeFront() && !kara.treeLeft()) {
				kara.turnRight();
			}

		}

	}

}
 
G

Gast2

Gast
Du musst natürlich die Variable random vorher irgendwo anlegen. Z.b. als Instanzvariable:
Java:
private Random random = new Random();
 

Joptionpane

Aktives Mitglied
Hab ich gemacht, danke, wobei es soweit ich es durch Testläufe beurteilen kann, kein Unterschied macht ob dies dabei ist.

Das einzige Problem jetzt noch ist eben, dass wenn Kara vor einem Baum ist, bzw gegen ein Baum läuft sich nicht wendet, stattdessen hört das Programm auf, obwohl ich es doch unten festgelegt habe das es sich wenden soll oder nicht?

Vor dem ganzen Random konnte er sich wenden. hmm..
 

Marco13

Top Contributor
Der Vorteil bei einem
private Random random = new Random(0);
ist, dass immer die gleiche Folge von Zufallszahlen kommt, das macht das Aufspüren von Fehlern deutlich leichter.
Dieses "Kara" hatte ich mir mal angesehen, weiß aber gerade nicht mehr: Kann man da einfach System.out.println("Bla"); verwenden, um Infos auf einer Konsole auszugeben?
 

Ähnliche Java Themen


Oben