2D随机游走,Java

时间:2012-09-06 18:00:25

标签: java random-walk

我正在编写一个带有命令行参数的二维随机游走。它应该估计随机游走者以起点为中心的2N乘2N广场边界所需的时间。

到目前为止我得到的是:

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 个答案:

答案 0 :(得分:3)

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

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

一个例子:N = 100,x = 90,y = 90 ==&gt; 90 * 90 + 90 * 90 = 16 200> 10 000.

切换到:

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

这会更好。并且您的reps变量已被更新使用。甚至没有一次,除了设定它的价值。这应该是什么目的?

答案 1 :(得分:1)

您的边界条件x*x + y*y <= N*N描述的是圆形,而不是方形。此外,短语“命中”意味着条件不包括边界(<)。

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