有没有办法在指定范围之外生成随机双值?
我知道范围内有一个:
Random r = new Random();
double randomValue = rangeMin + (rangeMax - rangeMin) * r.nextDouble();
我需要一个超出范围的人,例如
范围是20 - 50,我想要一个低于20或高于50的数字。
有人可以提出建议吗?
答案 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的几率在最低和最高范围内结束,所以你可能想要调整它。