我需要创建一个程序来模拟随机步行者,该步行者需要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 + ")");
}


您可以通过使用调试器逐步检查程序并检查变量值来解决此类问题。

09-27 07:05