0

所以我当前的代码有效地运行了“随机行走”问题,然后使用勾股定理来计算行走单位的实际距离,但现在我需要修改我的程序,以便我可以对所说的行走进行一定次数的试验,然后计算均方距离。不是真的在寻找答案,我真的还需要一个解释,以便我能够学习和重新创建,我想我只需要另一个 while 循环,但我不知道把它放在哪里。

import javax.swing.JOptionPane;
String a = JOptionPane.showInputDialog("Enter # of footsteps."); 
int z = Integer.valueOf(a);
int x= 0; // starting x position
int y= 0; // starting y position
double r;
int counterZ = 0;
if (z < counterZ ){
    System.out.println("Error");
}
while ( z > counterZ){
    r=Math.random();

    if (r<0.25){
        x=x+1;
    }

    else if(r > .25 && r<0.50){
        x=x-1;
    }
        else if(r > .5 && r<0.75){ 
        y=y+1;
    }

    else{
        y=y-1;
    }
    counterZ = counterZ + 1;
    System.out.println("(" + x + "," + y + ")");

}
System.out.println("distance = " + round(sqrt((x*x)+(y*y))));
4

2 回答 2

1

如果我错了,请纠正我,我的理解是你想运行步行循环一定次数并计算循环距离总和的平均步行距离。如果是这样的话,那么你所要做的就是这个,

int noc = Integer.valueOf(JOptionPane.showInputDialog("Enter # of cycles: "));
String a = JOptionPane.showInputDialog("Enter # of footsteps."); 
int z = Integer.valueOf(a);
int sum = 0;
double avg = 0.0;

for(int i=0;i<noc;i++) {
   sum+= randomWalk(z);
}
avg=(double)sum/noc;
System.out.println("the average distance walked in "+ noc + "cycles is "+avg);

如果您从主方法调用该方法而不为所在的类创建对象,则该randomWalk()方法应如下所示randomWalk()

public static int randomWalk(int z) {
    //place your code here, starting from the `int x=0;`
    //at last instead of printing the distance walked use the following code
    return (int) Math.round(Math.sqrt((x*x)+(y*y)));
}

你也错过了调用方法round()sqrt()使用那里的类Math。我已经为你纠正了它们Math.round()Math.sqrt()。如果没有类名,您将收到编译器错误,例如Symbol not found. 我还假设您已将java.lang.Math该类导入您的程序。

于 2013-09-13T06:10:43.413 回答
0

我建议首先整齐地缩进代码,以便更容易理解。

为了直接解决您的问题,我建议修改程序,以便将程序的实质嵌入到一个方法中(您可能会称它为randomWalk()),并且该main()方法只是调用randomWalk()并执行 I/O。main()这样做之后,修改方法以在循环randomWalk()内多次调用将非常容易。while

于 2013-09-13T02:05:33.960 回答