所以我们有两部分的任务。这是该部分所说的内容。
一个酒鬼开始漫无目的地走路,从一个灯柱开始。在每个时间步,醉汉忘记了他或她的位置,并且随机地向北,向东,向南或向西迈出一步,概率为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,它接受两个整数命令行参数N和T.在每个T独立实验中,模拟N步的随机游走并计算平方距离。输出 均方距离(T平方距离的平均值。)
%java RandomWalkers 100 10000
平方距离= 101.446%java RandomWalkers 100 10000
均方距离= 99.1674%java RandomWalkers 200 1000
均方距离= 195.75
我以为我可以用外面做一个嵌套的while循环,同时计算内部的试验次数,同时与上面完全相同。但它只打印了第一个试验距离,而不是所有试验的平均距离。我已经搞砸了几天了,这就是它现在的样子。任何和所有的帮助表示赞赏。
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);
}
}
答案 0 :(得分:2)
你应该开始使你的代码更易读和可维护,即使是你自己,通过将问题分成几个单元,这将成为方法。这是你必须做的:
请注意,向用户询问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的部分,以及显示实验结果的部分),并将其放入返回距离的方法中。