0

我正在编写一个采用命令行参数的二维随机游走。它应该估计随机游走器到达以起点为中心的 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);
   }

}

只是想检查一下你们是否认为我做错了。

4

2 回答 2

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变量是较新使用的。甚至一次都没有,除了设置它的价值。那应该是什么目的?

于 2012-09-06T18:14:57.427 回答
1

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

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

于 2012-09-06T18:29:37.910 回答