我已经做过一些研究,但是我找不到能在(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
答案 0 :(得分:1)
如果您需要在[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);
}
答案 1 :(得分:1)
您可以使用ThreadLocalRandom.nextDouble()
,但这并不是您所需要的:在没有多线程考虑的情况下,在范围内生成随机双精度。
实际上它的javadoc说:
当多个时,使用ThreadLocalRandom特别合适 任务(例如,每个ForkJoinTask)都使用随机数 在线程池中并行。
使用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);
}
答案 2 :(得分:0)
改为使用此功能:
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
答案 3 :(得分:0)
使用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);
}