所以我们有两部分的任务。这部分是这么说的。
醉汉开始漫无目的地走,从灯柱开始。在每一个时间步骤,醉汉忘记了他或她的位置,并随机采取一步,无论是北,东,南,或西,概率为25%。醉汉走完N步后,离灯柱还有多远? 编写一个程序RandomWalker.java,它采用整数命令行参数N,并模拟一个随机步行者的运动N步。在每一步之后,打印随机步行者的位置,把灯柱当作原点(0,0)。此外,打印正方形的最终距离,从原点。
这个程序正常工作,这是我的代码。
package project2;
import java.util.*;
import java.math.*;
public class RandomWalker {
public static void main(String args[]){
Scanner scan = new Scanner(System.in);
Random rand = new Random();
System.out.println("Enter the number of steps you want to take please.");
int steps = scan.nextInt();
int x = 0;
int y = 0;
int XorY;
int dist;
int count =0;
while(count<steps){
XorY = rand.nextInt(2);
dist = rand.nextInt(2);
if(XorY==0){
if(dist==0)
dist = -1;
x += dist;
System.out.println("("+x+", " +y+")");
}
else{
if(dist==0)
dist = -1;
y += dist;
System.out.println("("+x+", " +y+")");
}
count ++;
}
System.out.println("Squared Distance = " + (x*x + y*y));
}
}第二部分是我有问题的地方。上面写着。
编写一个程序RandomWalkers.java,在每个T个独立实验中使用两个整数命令行参数N和T,模拟N步的随机游走,并计算平方距离。输出平均平方距离(T平方距离的平均值)。 % java RandomWalkers 100 10000 平方距离= 101.446 % java RandomWalkers 100 10000 均方距离= 99.1674 % java RandomWalkers 200 1000 均方距离= 195.75
我想我可以做一个嵌套的with循环,同时计算内部的试验次数,同时与上面的情况完全相同。但这只是印出第一次试验的距离,而不是所有试验的平均距离。我已经搞了几天了,现在是这样的。任何和所有的帮助都是感激的。
package project2;
import java.util.*;
import java.math.*;
public class RandomWalkers {
public static void main(String args[]) {
Scanner scan = new Scanner(System.in);
Random rand = new Random();
System.out.println("Enter the number of steps you want to take please.");
int steps = scan.nextInt();
System.out.println("Enter the amount of trials you want run please");
int trials = scan.nextInt();
double avgDist =0;
int stepCount =0;
int trialCount =0;
int x = 0;
int y = 0;
int XorY;
int dist;
while(trialCount<trials){
while(stepCount<steps){
XorY = rand.nextInt(2);
dist = rand.nextInt(2);
if(XorY==0){
if(dist==0)
dist = -1;
x += dist;
}
else{
if(dist==0)
dist = -1;
y += dist;
}
stepCount ++;
}
avgDist += ((x*x) + (y*y));
trialCount++;
}
System.out.println("Average Squared Distancee = " +avgDist/(double)trialCount);
}
}发布于 2014-03-04 23:10:06
您应该开始提高代码的可读性和可维护性,甚至通过将问题分解成几个单元来实现,这些单元将成为方法。以下是你必须做的事:
注意,第一步,即向用户请求N和T值,也可能是第一步。但这甚至不是必要的,因为赋值要求将它们作为命令行参数传递:它们在传递给main()方法的数组中。
如果为这两个步骤编写代码,则将得到以下代码:
double totalDistance = 0;
for (int i = 0; i < t; i++) {
int distance = makeExperiment(n);
totalDistance += distance;
}
double averageDistance = totalDistance / t;所以现在您只需要实现makeExperiment()方法。但这很简单,因为您已经在分配的第一部分实现了它。您只需删除无用的代码(向用户询问N的部分,并显示实验结果),并将其放入返回距离的方法中。
https://stackoverflow.com/questions/22184877
复制相似问题