2012-09-06 113 views
0

我在写一个采用命令行参数的二维随机游走。它应该估计随机步行者需要多长时间才能达到以起始点为中心的2N乘2N平方的边界。二维随机游走,Java

我走到这一步是:

public class RandomWalk 
{ 
    public static void main(String[] args) 
    { 
     int N = Integer.parseInt(args[0]); 
     int reps = Integer.parseInt(args[1]); 
     int x = 0;  
     int y = 0;  
     double r; 
     int steps = 0; 

     while (x*x + y*y <= N*N) { 
      steps++; 
      r = Math.random(); 

      if  (r <= 0.25) x++; 
      else if (r <= 0.50) x--; 
      else if (r <= 0.75) y++; 
      else if (r <= 1.00) y--; 
     } 

     System.out.println(steps); 
    } 

} 

只是想检查,如果你们想我做错了。

+2

你有问题吗?这可能更适合[代码审查](http://codereview.stackexchange.com/)。 –

+0

是的,你可能是对的。不知道我是否有任何问题,因为我几乎没有足够的经验足够知道这一点。只是想从可能知道的人那里得到一个快速回答。林要求打印它与N = 1000和代表= 1000,即时得到1528331这将猜测步行者必须采取的步骤。 – bangalo

+0

第二个命令行参数应该表示什么? – Eric

回答

3

只有当随机游走达到阈值时,程序才会终止。不是该地区的边界。

while (x*x + y*y <= N*N) { 

一个例子:N = 100,X = 90,Y = 90 ==> 90 * 90 + 90 * 90 = 16 200> 10 000

它切换到:

while (x > -N && x < N && y > -N && y < N) { 

这样会更好。而你的reps变量更新使用。即使不是一次,除了设置它的价值。那应该是什么目的呢?

+0

+1尼斯答案 - 回答你的问题,我认为他应该考虑代表人数 - 所以我认为他错过了另一个循环。 – jeff

1

你的边界条件,x*x + y*y <= N*N描述了一个圆,而不是一个正方形。此外,措词“命中”意味着条件不包括边界(<)。

你想要Math.abs(x) < N && Math.abs(y) < N