1

我不得不为一个班级项目写这个。编译时我没有收到任何错误,但是当我尝试执行它时程序不会运行。

我们必须编写一个程序 myRandomWalkers.java,它接受两个命令行参数 N 和 T。在每个 T 个独立实验中,模拟 N 步的随机游走并计算平方距离。输出均方距离(T 方距离的平均值)。

我写了以下内容:

public class myRandomWalkers {

    public static void main(String[] args) {

        int n= Integer.parseInt(args[0]);
        int t= Integer.parseInt(args[1]);
        int x= 0; // starting x position
        int y= 0; // starting y position
        int sum = 0; // for calculating mean square distance
        double r;

        int count = 0;
        while (count <= t)
        {
            for (int i=0; i<n; i++) {

                r= Math.random();
                if (r<=0.25) x++;
                else if(r<=0.50) x--;
                else if(r<=0.75) y++;
                else if(r<=1.0) y--;        

                int z = ((x*x) + (y*y));
                sum +=z;
            }
        }

        int average = (sum/t);
        System.out.println ("mean squared distance = " + average);
    }        
}

提前致谢!

4

2 回答 2

9

输出将取决于您传递给程序的参数。然而:

  • 如果count > t不会执行while循环
  • 如果count <= t由于您不增加计数而导致 while 循环永远不会结束 - 您可能需要count++;在 while 循环中的某个位置添加一个。
于 2012-10-02T17:33:13.683 回答
0

正如 assylias 所说,你的 while 循环的退出条件永远不会达到,因为count永远不会改变。

但是,我还要评论您使用了 2 个不同的循环,而这两个循环的情况非常相似。有些人会争辩说,您在这里使用哪种类型的循环是个人喜好,但使用 2 种不同的样式没有意义。我倾向于使用这样的原则,即如果我知道会有多少次迭代然后使用 for 循环(所以任何使用计数器的东西都符合条件)

其他考虑(额外的信用)可能是看看你的 parseInt 调用,我相信负数会很好,但你的计算不会考虑它们。而且非数字也可以很容易地传递到命令行,那么你的程序会做什么呢?你希望它做什么?

于 2012-10-02T17:47:13.157 回答