Answers:
要在rangeMin
和之间生成一个随机值rangeMax
:
Random r = new Random();
double randomValue = rangeMin + (rangeMax - rangeMin) * r.nextDouble();
rangeMin
及rangeMax
较大,则有可能是他们之间的不同10,000,000双重价值。的结果(rangeMax - rangeMin) * r.nextDouble()
将仅在可能的10,000,000个值中的10,000个之间进行选择。(我觉得这不是一个完美的解释,但也许会有所帮助...)
在Java 7发行之前曾问过这个问题,但是现在,使用Java 7(及更高版本)API还有另一种可能的方式:
double random = ThreadLocalRandom.current().nextDouble(min, max);
nextDouble
将返回介于最小值(包含)和最大值(不含)之间的伪随机双精度值。范围不一定是int
,可以是double
。
用这个:
double start = 400;
double end = 402;
double random = new Random().nextDouble();
double result = start + (random * (end - start));
System.out.println(result);
编辑:
new Random().nextDouble()
:随机产生0到1之间的数字。
start
:起始编号,将编号“右移”
end - start
:间隔。随机为您提供此数字的0%至100%,因为随机为您提供了0到1之间的数字。
编辑2: Tks @daniel和@aaa bbb。我的第一个答案是错误的。
import java.util.Random;
public class MyClass {
public static void main(String args[]) {
Double min = 0.0; // Set To Your Desired Min Value
Double max = 10.0; // Set To Your Desired Max Value
double x = (Math.random() * ((max - min) + 1)) + min; // This Will Create A Random Number Inbetween Your Min And Max.
double xrounded = Math.round(x * 100.0) / 100.0; // Creates Answer To The Nearest 100 th, You Can Modify This To Change How It Rounds.
System.out.println(xrounded); // This Will Now Print Out The Rounded, Random Number.
}
}
随机的主要思想是它返回一个伪随机值。没有完全随机的函数,因此,在某些情况下,使用相同种子的2个随机实例将返回相同的值。
最好先查看功能文档以了解功能文档(https://docs.oracle.com/javase/8/docs/api/java/util/Random.html)
现在我们知道函数nextDouble()的返回值是0.0到1.0之间的伪随机值,我们可以利用它来取得优势。
为了在A和B之间创建一个随机数,边界是有效的(A> B),我们需要:1.找到A和B之间的范围,以便我们知道有多少“步数”。2.使用随机函数确定要执行的步骤(由于返回值介于0.0和1.0之间,因此您可以将其视为“选择随机增加的百分比”)3.添加偏移量
毕竟,我认为暴民为您提供了最简单,最常见的方式
double randomValue = rangeMin +(rangeMax-rangeMin)* r.nextDouble();
double RandomValue =偏移量+(Range)*(0.0到1.0之间的randomVal)
double rangeMax= Double.MAX_VALUE;
,double rangeMin= -rangeMax;
您将始终获得无限值作为回报。您可能需要检查Double.valueOf(rangeMax-rangeMin).isInfinite()
。