我需要创建一个程序来模拟随机步行者,该步行者需要n步,同时打印每一步的位置,最后打印出距原点(x ^ 2 + y ^ 2)的平方距离。我觉得我做错了,因为末尾的平方距离不能显示正确的值,我迷路了。有什么帮助吗?
public class RandomWalker {
public static void main(String[] args) {
int steps = Integer.parseInt(args[0]);
int x = 0;
int y = 0;
for (int i = 0; i < steps; i++){
System.out.println("(" + x + "," + y + ")");
double z = (int)(Math.random()*4);
if (z == 0) {
x++;
} else if (z == 1){
y++;
} else if (z == 2){
x--;
} else if (z == 3){
y--;
}
}
double sqd = (x*x) + (y*y);
System.out.println("Squared distance = ");
System.out.println(sqd);
}
}
预期的输出应如下所示:
(0,0)
(-1,0)
(-1,-1)
(-1,-2)
(-1,-3)
(-1,-4)
(-1,-5)
(0,-5)
(-1,-5)
(-2,-5)
(-2,-4)
Squared distance =
20.0
但是,输出的平方距离几乎永远不会是正确的:
(0,0)
(0,-1)
(0,-2)
(0,-1)
(-1,-1)
(-2,-1)
(-3,-1)
(-3,0)
(-4,0)
(-4,1)
Squared distance =
10.0
最佳答案
问题在于,在打印出最后一对值之后,您将对随机游走进行另一次迭代,因为println
语句位于循环的开头。将其放在末尾,平方距离将与您输出的最后一个坐标对匹配:
for (int i = 0; i < steps; i++){
double z = (int)(Math.random()*4);
if (z == 0) {
x++;
} else if (z == 1){
y++;
} else if (z == 2){
x--;
} else if (z == 3){
y--;
}
System.out.println("(" + x + "," + y + ")");
}
您可以通过使用调试器逐步检查程序并检查变量值来解决此类问题。