2016-04-22 14 views
0

Ich versuche ein Programm zu schreiben, das einen zufälligen Weg von einem Mittelpunkt (0,0) 100 Mal nimmt und die durchschnittliche Anzahl der Schritte berechnet. Ich habe den folgenden Code:Java Random Walk Programm?

package randomwalk; 
import java.util.Random; 

public class RandomWalk { 
    int x = 0; 
    int y = 0; 
    int steps = 0; 
    Random r = new Random(); 
    public RandomWalk(){ 


    do { 
     int num = randInt(1,4); 
     if(num == 1){ 
      this.x+=1; 

     } 
     else if(num == 2){ 
      this.x-=1; 
     } 

     else if(num == 3){ 
      this.y+=1; 
     } 
     else if(num == 4){ 
      this.y-=1; 
     } 

     this.steps++; 


    } while(this.x != 0 || this.y != 0); 

    } 

    public int getSteps(){ 
    return this.steps; 
    } 


    public static int randInt(int min, int max){ 
    Random r = new Random(); 
    int num = r.nextInt((max-min) + 1) + min; 
    return num; 
    } 
} 

ich auch die Testfunktion haben:

package randomwalk; 

public class Test { 
    public static void main(String args[]){ 
    int total = 0; 
    for(int i = 0; i<100; i++){ 
     RandomWalk rand = new RandomWalk(); 
     int steps = rand.getSteps(); 
     total+=steps; 
    } 
    System.out.println("The average is: " + ((total/2)/100)); 
    } 
} 

Was mache ich falsch hier? Mein Programm scheint immer unendlich zu laufen und ich bekomme nie einen Rückgabewert. Es läuft einfach weiter. Hilfe ist willkommen!

+0

Von ** Mittelpunkt (0,0) ** wohin? Oder einfach zurück zum ** Mittelpunkt (0,0) **? – Blank

+0

@Reno zurück zum Mittelpunkt –

+0

Jetzt sind wir klar, eigentlich läuft es immer unendlich, diese Schleife wollen Sie, wenn 'this.x == 0' und' this.y == 0', Schleife bricht, aber diese Bedingung ist ziemlich kritisch und diese Schleife wird sogar 100 mal tun. Wir können nicht vorhersagen, was 'Random' zu uns zurückkehrt. Sie sollten also dieser Schleife eine zusätzliche Bedingung geben. – Blank

Antwort

1

Sie Schleife, während x nicht 0 oder y ist nicht 0. Da durch Zufallsgenerierung Sie nicht immer wieder auf 0 zurückkommen, kann das Programm für immer ausgeführt werden. Vielleicht möchten Sie versuchen, Ihre Schleife um die Anzahl der Schritte zu begrenzen, die ein Walker benötigt.

while (steps < 100) 

statt

while (this.x != 0 || this.y != 0) 
+0

Sie möchten beide Bedingungen überprüfen: '(this.x! = 0 || this.y! = 0) && steps <100', da der entscheidende Punkt darin besteht, herauszufinden, wie viele Schritte erforderlich sind, um zum Zentrum zurückzukehren. Und dann müssen Sie in Ihrer Hauptmethode etwas Besonderes tun, wenn die Anzahl der Schritte gleich dem Maximum ist. Aber das wird natürlich den Durchschnitt verfälschen. –

+0

Eine andere Sache, die Sie tun könnten, ist, die x, y-Position alle tausend Schritte oder so auszudrucken. Auf diese Weise wird es, wenn es einen Fehler gibt (x wird immer größer) zum Beispiel offensichtlich. Aber ich denke, das eigentliche Problem ist, dass statistisch gesehen Ihre Wanderung nie auf 0,0 zurückgeht. – markspace

+0

Ich habe gerade meinen eigenen zufälligen Spaziergang geschrieben. Die meisten Runs sind nach weniger als 100 Schritten beendet. Ein paar nahmen> 10.000 Schritte. Eine, die ich nach 1.000.000 Schritten manuell getötet habe. Wenn das anfängliche x oder y sehr groß wird, dann erscheint es unwahrscheinlich, dass sowohl x als auch y jemals zur gleichen Zeit auf 0 zurückkehren können. – markspace