使用Java生成一定范围内的多个随机双精度数?

时间:2019-03-03 15:13:38

标签: java random

我已经做过一些研究,但是我找不到能在(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

4 个答案:

答案 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); 
}