如何生成随机 int
特定范围内的值?
我尝试了以下方法,但这些方法不起作用:
尝试1:
randomNum = minimum + (int)(Math.random() * maximum);
缺陷: randomNum
可以大于 maximum
.
尝试2:
Random rn = new Random();
int n = maximum - minimum + 1;
int i = rn.nextInt() % n;
randomNum = minimum + i;
缺陷: randomNum
可以小于 minimum
.
30条答案
按热度按时间vlurs2pr1#
请原谅我的挑剔,但是大多数人建议的解决办法,即。,
min + rng.nextInt(max - min + 1))
,似乎很危险,因为:rng.nextInt(n)
无法到达Integer.MAX_VALUE
.(max - min)
可能导致溢出时min
是阴性。一个简单的解决方案将返回正确的结果
min <= max
内[Integer.MIN_VALUE
,Integer.MAX_VALUE
]. 考虑以下幼稚的实现:虽然效率低下,但要注意成功的概率在
while
循环将始终为50%或更高。o2gm4chl2#
这个
Math.Random
java中的类是基于0的。所以,如果你这样写:String[] i = new String[25];
Random rand = new Random();
int index = 0;
index = rand.nextInt( i.length );
index = (int) Math.floor(Math.random() * i.length);
oymdgrw73#
使用nextint(n)方法为min和max的差生成一个随机数,然后将min number添加到结果中:
piwo6bdm4#
在掷骰子的情况下,它将是1到6(不是0到6)之间的随机数,因此:
dgiusagp5#
ukxgm1gy6#
要生成“介于两个数字之间”的随机数,请使用以下代码:
这将给您一个介于1(包含)和11(排除)之间的随机数,因此通过加1来初始化上限值。例如,如果要生成1到10之间的随机数,则用11而不是10初始化上界数。
hvvq6cgz7#
您可以将第二个代码示例编辑为:
nhjlsmyf8#
或者看看apache commons中的randomutils。
rnmwe5a29#
从Java7开始,您不应该再使用
Random
. 对于大多数用途,随机数发生器的选择是现在ThreadLocalRandom
.对于fork-join池和并行流,使用
SplittableRandom
.约书亚·布洛赫。有效的java。第三版。
从Java8开始
对于fork-join池和并行流,使用
SplittableRandom
这通常是更快,有更好的统计独立性和均匀性的性质相比Random
.生成一个随机的
int
在范围内[0, 1_000]:
```int n = new SplittableRandom().nextInt(0, 1_001);
要返回随机值流,请执行以下操作:
vsikbqxv10#
他们用java-8引入了这个方法
ints(int randomNumberOrigin, int randomNumberBound)
在Random
班级。例如,如果要生成[0,10]范围内的五个随机整数(或单个整数),只需执行以下操作:
第一个参数仅指示
IntStream
generated(这是产生无限IntStream
).如果需要执行多个单独的调用,可以从流中创建无限基本迭代器:
你也可以为我做
double
以及long
价值观。希望有帮助!:)wr98u20j11#
最好使用securerandom,而不仅仅是random。
emeijp4312#
您可以在java 8中简明扼要地实现这一点:
8qgya5xd13#
这很有效。
rvpgvaaj14#
对第一个解决方案稍作修改就足够了。
更多信息请参见此处了解
Random
cbjzeqam15#
用途:
整数
x
现在是一个随机数,可能的结果是5-10
.