我做了一些研究,但我找不到一种工作方式让我在(0 - 0.75)范围内生成9个随机双打。
我还需要将所有9个随机数加在一起进行进一步的计算。我正在使用DrJava。
到目前为止,我只尝试了一个重复9次的随机数。
double minLight = 0.0;
double maxLight = 0.75;
double totalSum = 0;
for (int i = 0; i < 9; i++) {
double monday = (Math.random() * (maxLight - minLight) + minLight);
double mRounded = Math.round(monday * 100.0) / 100.0;
totalSum += mRounded;
}
double mWalk = totalSum + shortestWalk;
for (int i = 0; i < 9; i++) {
double wednesday = (Math.random() * (maxLight - minLight) + minLight);
double wRounded = Math.round(wednesday * 100.0) / 100.0;
System.out.println(wRounded);
totalSum += wRounded;
}
double wWalk = totalSum + shortestWalk;
System.out.println(mWalk);
System.out.println(wWalk);
Out Printed:
0.04
0.05
0.52
0.72
0.59
0.05
0.73
0.15
0.38
6.287142857142857
9.517142857142856
如果你需要在[least, bound)
范围内的双倍,你可以使用ThreadLoacalRandom.nextDouble(least, bound)
方法。
for (int i = 0; i< 3 ; i++) {
double d = ThreadLocalRandom.current().nextDouble(-0.75, 0);
System.out.println(d);
}
您可以使用ThreadLocalRandom.nextDouble()
,但这不是为您的要求而设计的:在一个范围内生成一个没有多线程考虑的随机双精度。
的确,它的javadoc说:
当多个任务(例如,每个ForkJoinTask)在线程池中并行使用随机数时,使用ThreadLocalRandom是特别合适的。
使用Random
,您可以获得正确的结果,并且在开销方面看起来更便宜:
public double nextDouble() {
return (((long)(next(26)) << 27) + next(27)) * DOUBLE_UNIT;
}
使用它如:
Random r = new Random();
Double min = 0.0;
Double max = 0.75;
for (int i=0;i<10;i++){
double randomValue = min + (max - min) * r.nextDouble();
System.out.println(randomValue);
}
使用for循环生成并打印新号码,
for(int i=0;i<10;i++){
double x = (Math.random() * (max - min) + min);
double xrounded = Math.round(x * 100.0) / 100.0;
System.out.println(xrounded);
}
请改用此功能:
public double generateRandomDouble(double min, double max) {
double x = (Math.random() * (max - min) + min);
return Math.round(x * 100.0) / 100.0;
}
每次调用它,你都会得到一个随机的双倍。参数是你的最小值和最大值。所以这:
generateRandomDouble(0.0, 0.75);
将返回1随机加倍。您需要做的就是调用该函数9次。因此:
double sum = 0;
for (int i = 0; i < 9; i++) {
sum += generateRandomDouble(0.0, 0.75);
}
System.out.println("The sum is: " + sum);
这应该是你想要的。
总和是:1.98