如何在Java中生成指定范围之外的随机双数?

时间:2018-02-12 14:26:14

标签: java math random

有没有办法在指定范围之外生成随机双值?

我知道范围内有一个:

Random r = new Random();
double randomValue = rangeMin + (rangeMax - rangeMin) * r.nextDouble();

我需要一个超出范围的人,例如

范围是20 - 50,我想要一个低于20或高于50的数字。

有人可以提出建议吗?

4 个答案:

答案 0 :(得分:2)

也许像(对于数字1-20和50-100):

Random r = new Random();
double randomValue = r.nextDouble()*70;
if(randomValue>20) randomValue+=30;

资源不昂贵且易于理解。

答案 1 :(得分:0)

您可以尝试这样的想法:

Random rnd = new Random();
double x=0;
do{
    x = rnd.nextDouble()*100;
}while(x>20 && x<50 );

    System.out.println(x);
    }

您生成一个随机双精度数(需要乘以100,因为生成0和1之间的双返回值)和循环,而结果&gt; 20和<50

答案 2 :(得分:0)

如果您想在特定范围之外使用double任何 double,那么您可以利用double代表的事实64位,您可以使用Double.longBitsToDouble方法将任何64位值转换为public static void main(String[] args) { Random r = new Random(); double d; do { d = Double.longBitsToDouble(r.nextLong()); } while (d >= 20 && d <= 50); System.out.println(d); }

var contents = fs.readFileSync("./../../skill.json");
var jsonContent = JSON.parse(contents);
console.log("Address", jsonContent['manifest']['apis']['custom']['endpoint']['uri']);

答案 3 :(得分:-1)

首先,你总是需要为你正在生成的数字设置一个上限,所以'rangeMax'以上就不会这样做。您基本上想要的是生成的数字落入两个范围[0,minRange]或[maxRange,maxValue]中的一个。

你可以使用'懒惰方法',它只是生成一个介于0和maxValue之间的值,并生成一个新的,直到你开始不会落入[minRange,maxRange]范围,或者你可以做两个步骤生成过程,即生成一个随机数,确定您是否生成较低范围或较高范围的数字,例如:

public static void main(String[] args) {
    double result  = (new Random().nextInt(2)) == 0 ? generateInRange(0, 20) : generateInRange(50, Double.MAX_VALUE);
}

private static double generateInRange(double min, double max) {
    return new Random().nextDouble() * (max-min) + min;
}

这确实让你有50/50的几率在最低和最高范围内结束,所以你可能想要调整它。