我正在编写一个带有命令行参数的二维随机游走。它应该估计随机游走者以起点为中心的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);
}
}
只是想检查一下你们是否认为我做错了。
答案 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