2016-04-22 2 views
0

Я пытаюсь написать программу, которая выполняет случайное блуждание от центральной точки (0,0) 100 раз и вычисляет среднее число выполненных шагов. У меня есть следующий код:Программа Java Random Walk?

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; 
    } 
} 

У меня также есть функции тестирования:

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)); 
    } 
} 

Что я делаю неправильно здесь? Моя программа всегда работает бесконечно, и я никогда не получаю возвращаемое значение. Он просто продолжает работать. Помощь приветствуется!

+0

С ** центральной точки (0,0) ** к где? Или просто вернуться к ** центральной точке (0,0) **? – Blank

+0

@Reno обратно в центральную точку –

+0

Теперь мы понятны, на самом деле это всегда выполняется бесконечно, этот цикл, вы хотите, когда 'this.x == 0' и' this.y == 0', перерывы цикла, но это условие является весьма критичным, и этот цикл будет делать 100 раз. Мы не можем сказать, что «Случайный» возвращается к нам. Поэтому вы должны дать дополнительное условие этому циклу. – Blank

ответ

1

Вы зацикливаете, пока x не является 0 или y не равно 0. Так как случайным поколением вам не гарантировано когда-либо возвращаться к 0, программа может работать вечно. Возможно, вы захотите ограничить свой цикл числом шагов, которые выполняет ходок.

while (steps < 100) 

вместо

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

Вы хотите проверить оба условия: '(this.x! = 0 || this.y! = 0) && шаги <100', так как все дело в том, чтобы узнать, сколько шагов требуется, чтобы вернуться в центр. И тогда вам нужно сделать что-то особенное в своем основном методе, если количество шагов равно максимальному. Но, конечно, это будет искажать среднее. –

+0

Еще одна вещь, которую вы можете сделать, - распечатать позицию x, y каждые тысячи шагов или около того. Таким образом, если есть ошибка (x всегда увеличивается, например), это станет очевидным. Но я думаю, что реальная проблема заключается в том, что статистически говоря, ваша прогулка никогда не вернется к 0,0. – markspace

+0

Я только что написал свою собственную случайную прогулку. Большинство запусков заканчивается менее чем за 100 шагов. Несколько человек приняли> 10000 шагов. Один я убил вручную после 1 000 000 шагов. Если начальный x или y становится очень большим, то маловероятно, что как x, так и y когда-либо смогут вернуться к 0 одновременно. – markspace