在0,0坐标下启动Random Walker java程序时出现问题

在0,0坐标下启动Random Walker java程序时出现问题,java,Java,我正在尝试建立一个程序,它接受一个整数并模拟一个随机行走的运动,直到随机行走者从起点到曼哈顿距离r为止。关键要求之一是在0,0坐标处启动程序,但我无法 public class RandomWalker { public static void main(String args[]) { int r = Integer.parseInt(args[0]); int x = 0; int y = 0; int step

我正在尝试建立一个程序,它接受一个整数并模拟一个随机行走的运动,直到随机行走者从起点到曼哈顿距离r为止。关键要求之一是在0,0坐标处启动程序,但我无法

public class RandomWalker {

    public static void main(String args[]) {

        int r = Integer.parseInt(args[0]);

        int x = 0;
        int y = 0;
        int step = 0;
        double R;
        while(Math.abs(x) < r && Math.abs(y) < r) {
            step++;
            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("(" + x + ", " + y + ")" );
        }
        System.out.println("steps = " + step);
    }
}
公共类{
公共静态void main(字符串参数[]){
int r=Integer.parseInt(args[0]);
int x=0;
int y=0;
int步长=0;
双R;
while(Math.abs(x)如果(R我怀疑您只需要在步进之前打印坐标。请参见下文。我还尝试将walker值封装在类中,而不是封装在main方法中

public class RandomWalker {
    private final Random random;
    private int steps = 0;
    private int x = 0;
    private int y = 0;

    public RandomWalker(Random random) {
        this.random = random;
    }

    public String toString() {
        return steps + ": (" + x + "," + y + ")";
    }

    public void step() {
        steps++;
        switch (random.nextInt(4)) {
            case 0: x++; break;
            case 1: x--; break;
            case 2: y++; break;
            case 3: y--; break;
        }
    }

    public int distance() {
        return Math.abs(x) + Math.abs(y);
    }

    public static void main(String args[]) {
        int r = Integer.parseInt(args[0]);
        RandomWalker walker = new RandomWalker(new Random());
        while (walker.distance() < r) {
            System.out.println(walker);
            walker.step();
        }
        System.out.println("steps = " + walker.steps);
    }
}
公共类{
私有最终随机;
私有整数步长=0;
私有整数x=0;
私有整数y=0;
公共随机步行器(随机){
这个。随机=随机;
}
公共字符串toString(){
返回步骤+”:(“+x+”,“+y+”);
}
公共无效步骤(){
steps++;
开关(随机。nextInt(4)){
案例0:x++;中断;
案例1:x--;断裂;
案例2:y++;中断;
案例3:y--;断裂;
}
}
公共整数距离(){
返回Math.abs(x)+Math.abs(y);
}
公共静态void main(字符串参数[]){
int r=Integer.parseInt(args[0]);
RandomWalker=new RandomWalker(new Random());
while(walker.distance()
你的代码似乎是从(0,0)开始的。为什么你认为不是呢?但是,我注意到你没有正确地实现曼哈顿距离。测试应该是
Math.abs(x)+Math.abs(y)
。当我运行测试时,它从不从(0,0)开始。此外,课程的自动加载器建议坐标不在(0,0).我不明白。如果x和y被初始化为0,它们不应该总是从0开始吗?我怀疑这只是因为你在更改坐标后打印坐标。先打印,你会看到它是从0,0开始的。我会添加一个答案。你的意思是你应该打印步行从0,0开始吗?哦,我的话..那很尴尬。妈现在就开始-谢谢!