【发布时间】:2020-08-08 07:28:03
【问题描述】:
我正在用 java 编写一个程序,它基本上通过为每一步移动 1 个 x 或 y 值来模拟随机游走。前任。从 (0, 0) 开始,使用 Math.random,我可以使用 x++ 或 y——将 x 或 y 坐标更改一个值。一旦 x 和 y 值加在一起的绝对值给我输入的数字(通过命令行参数),这个 walk 就会终止。有两个命令行整数,第一个是刚才提到的数字,第二个是试验次数,这是我必须模拟这次步行的次数。在该程序结束时,计步器会记录每次试验中采取的步数,然后对其进行平均,以得出每次试验所用的平均步数相加。
我遇到的问题是,当我运行我的程序时,没有出现任何错误或其他任何东西,它只是没有运行,这让我觉得运行时间太长了,而且有太多的迭代需要通过.试验变量的输入将在 100000 到 1000000 之间。如果能提供解决此问题的任何帮助或想法,我将不胜感激。
这是我的程序代码:
public class RandomWalkers {
public static void main(String [] args) {
int r = Integer.parseInt(args[0]);
double trials = Double.parseDouble(args[1]);
double avgSteps = 0;
double totalSteps = 0;
int x = 0;
int y = 0;
int steps;
for(int j = 0; j < trials; j++ ) {
int trialDistance = 0;
for(steps = 0; trialDistance != r; steps++) {
double random = Math.random();
if(random < 0.25) {
x++;
} else if((0.25 < random) && (random < 0.50)) {
x--;
} else if((0.50 < random) && (random < 0.75)) {
y++;
} else if((0.75 < random) && (random < 1.00)) {
y--;
} else {}
totalSteps = totalSteps + steps;
trialDistance = Math.abs(x) + Math.abs(y);
}
}
avgSteps = totalSteps / trials;
System.out.println("average number of steps = " + avgSteps);
}
}
【问题讨论】:
-
它正在运行,只是可能需要很长时间才能完成。首先尝试运行少量试验,您应该会看到它完成。重复运行以增加试验次数,完成所需的时间会越来越长。
-
因为随机数出现在正态分布中,所以你的“walker”会长时间保持在(0,0)附近。
-
它实际上“永远”运行的关键在于您真正模拟了每一步,并且需要大量的步骤。相反,您可以深入研究概率数学并根据预期的概率分布计算结果(免责声明:我不知道您需要的公式)。
标签: java eclipse performance loops for-loop