所以我已经在这段代码上工作了一段时间,我已经停滞不前了。这是一个学校项目,它分为两部分,第一部分根本没有问题。
一个酒鬼开始漫无目的地走路,从灯柱开始。在每个时间步,酒鬼都会忘记他或她在哪里,并随机迈出一步,无论是北、东、南还是西,概率为 25%。N步后酒鬼离灯柱有多远?
编写一个程序 RandomWalker.java它采用整数命令行参数 N 并模拟随机步行者的运动 N 步。每一步后,打印随机游走器的位置,将灯柱视为原点(0,0)。此外,打印与原点的最终距离的平方。
我针对这部分问题的代码是:
import java.util. *;
import java.math. *;
public class RandomWalker {
public static void main(String args[]){
int N = Integer.parseInt(args[0]);
Random rand = new Random();
int x = 0;
int y = 0;
int XorY;
int dist;
int count =0;
while(count<N){
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
squared distance = 101.446
% java RandomWalkers 100 10000
mean squared distance = 99.1674
% java RandomWalkers 200 1000
mean squared distance = 195.75
我想出的代码是——
import java.util.*;
import java.math.*;
public class RandomWalkers {
public static void main(String args[]) {
Random rand = new Random();
int N = Integer.parseInt(args[0]);
int T = Integer.parseInt(args[1]);
double avgDist =0;
int stepCount =0;
int trialCount =0;
int x = 0;
int y = 0;
int XorY;
int dist;
while(trialCount<T){
while(stepCount<N){
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("Mean Squared Distance = " + avgDist/(double)trialCount);
}
}
我在这里被难住了很长时间,代码编译并运行,但似乎它给我的只是一个试验值,而不是所需的平均值。任何帮助不胜感激,非常感谢。(也很抱歉格式不正确,我是新来的,尽力了)。
while loop
在for loop
内的解决方案如下所示。您必须在每次试验后重置x
、y
和distance
变量。或者,更好的是,在 for loop
的开头定义并初始化为 0,如下所示:
public class RandomWalkers {
public static void main(String[] args) {
int r = Integer.parseInt(args[0]);
int trials = Integer.parseInt(args[1]);
double steps = 0.0;
for (int j = 0; j < trials; j++) { // run one experiment
int x = 0;
int y = 0;
int distance = 0;
while (distance < r) { // simulate one random walking
double i = Math.random();
if (i < 0.25) {
y += 1;
distance = Math.abs(x) + Math.abs(y);
steps += 1;
}
if (i >= 0.25 && i < 0.5) {
x += 1;
distance = Math.abs(x) + Math.abs(y);
steps += 1;
}
if (i >= 0.5 && i < 0.75) {
y -= 1;
distance = Math.abs(x) + Math.abs(y);
steps += 1;
}
if (i >= 0.75 && i < 1) {
x -= 1;
distance = Math.abs(x) + Math.abs(y);
steps += 1;
}
}
}
System.out.println("average number of steps = " + steps / trials);
}
}