总所周知,java.util.Random
的 nextDouble()
生成的随机数的范围是 0
(包括) 到 1
(不包括),假如想要实现类似于生成一个在区间 [0, 100]
的实数的话,做一点小变动就能简单实现。
只要实现了 [0, 1]
区间的随机数,其它的随机数范围基本可以通过简单的数学计算变换得到,而 nextDoubole()
生成的范围是 [0, 1)
,显然不符合我们的要求。所以我们可以退而求其次,使用 nextInt(bound)
再做点变换,就能得到 [0, 1]
区间的随机数。
nextInt(bound)
会生成一个在 [0, bound)
区间的整数,所以我们可以将它除一下 (bound - 1.0)
,就能得到 [0, 1]
区间的实数了。这个 bound
可以取一个大一点的数,随便写一个数就行,你用 Integer.MAX_VALUE
也没人管你。
Random random = new Random();
// 生成在 [0, 1] 区间的随机数
double rand = random.nextInt(1919810) / 1919809.0;
double a = rand * 100; // 0-100 的随机数
double b = 100 + rand * 50; // 100-150 的随机数
// 10-30 的随机数
double min = 10;
double max = 30;
double c = min + rand * (max - min);