所以我现在的代码有效地运行了“随机游走”问题,然后使用毕达哥拉斯定理来计算出行走单位的实际距离,但现在我需要修改我的程序,以便我可以对所述步行进行一定数量的试验然后计算均方距离。不是真正寻找答案,我真的还需要一个解释,以便我可以学习和重新创建,我想我只需要另一个循环但我不知道在哪里放。
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))));
答案 0 :(得分:0)
我建议首先缩小代码,以便更容易理解。
为了直接解决您的问题,我建议修改程序,以便将程序的实质内容嵌入到方法中(您可能将其称为randomWalk()
)和main()
方法调用randomWalk()
并执行I / O.完成此操作后,可以非常轻松地修改main()
方法,以便在randomWalk()
循环内多次调用while
。
答案 1 :(得分:0)
如果我错了,请纠正我。我的理解是你想要将步行周期运行一定次数并计算在周期距离总和上行走的平均距离。如果是这种情况,那么你所要做的就是这个,
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()
方法应该如下所示,如果您从main方法调用它而不创建类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
课程导入您的课程。