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

问题描述 投票:-1回答:4

我做了一些研究,但我找不到一种工作方式让我在(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
java random
4个回答
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
投票

您可以使用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);
}

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

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

© www.soinside.com 2019 - 2024. All rights reserved.