如何生成随机 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条答案
按热度按时间8xiog9wr16#
对第一个解决方案稍作修改就足够了。
更多信息请参见此处了解
Random
bf1o4zei17#
这个
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);
zxlwwiss18#
ThreadLocalRandom
类的等价物java.util.Random
对于多线程环境。在每个线程中本地生成随机数。因此,通过减少冲突,我们可以获得更好的性能。tvmytwxo19#
只需执行以下语句:
下面是它的源代码
随机发生器.java
它只是简单明了。
b1zrtrql20#
在java 1.7或更高版本中,执行此操作的标准方法如下:
请参阅相关的javadoc。这种方法的优点是不需要显式初始化java.util.random示例,如果使用不当,这可能会导致混淆和错误。
然而,相反地,没有办法显式地设置种子,因此在测试或保存游戏状态或类似的情况下,很难再现有用的结果。在这些情况下,可以使用下面所示的Java1.7之前的技术。
在java 1.7之前,标准方法如下:
请参阅相关的javadoc。实际上,java.util.random类通常比java.lang.math.random()更好。
特别是,当标准库中有一个简单的api来完成任务时,就不需要重新设计随机整数生成轮。
lhcgjxsq21#
用途:
整数
x
现在是一个随机数,可能的结果是5-10
.raogr8fs22#
让我们举个例子。
假设我希望生成一个介于5-10之间的数字:
让我们明白。。。
用最大值初始化max,用最小值初始化min。
现在,我们需要确定能得到多少可能的值。在这个例子中,应该是:
5, 6, 7, 8, 9, 10
所以,这个数应该是max-min+1。
i、 e.10-5+1=6
随机数将产生一个0-5之间的数字。
i、 e.0、1、2、3、4、5
将最小值添加到随机数将产生:
5, 6, 7, 8, 9, 10
因此我们得到了所需的范围。
eulz3vhy23#
请原谅我的挑剔,但是大多数人建议的解决办法,即。,
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%或更高。1u4esq0p24#
我发现这个例子可以生成随机数:
本例生成特定范围内的随机整数。
此类的示例运行:
j0pj023g25#
要生成“介于两个数字之间”的随机数,请使用以下代码:
这将给您一个介于1(包含)和11(排除)之间的随机数,因此通过加1来初始化上限值。例如,如果要生成1到10之间的随机数,则用11而不是10初始化上界数。
snz8szmq26#
他们用java-8引入了这个方法
ints(int randomNumberOrigin, int randomNumberBound)
在Random
班级。例如,如果要生成[0,10]范围内的五个随机整数(或单个整数),只需执行以下操作:
第一个参数仅指示
IntStream
generated(这是产生无限IntStream
).如果需要执行多个单独的调用,可以从流中创建无限基本迭代器:
你也可以为我做
double
以及long
价值观。希望有帮助!:)2w2cym1i27#
另一种选择是使用apache commons:
ddhy6vgd28#
用途:
oalqel3c29#
使用nextint(n)方法为min和max的差生成一个随机数,然后将min number添加到结果中:
omjgkv6w30#
这很有效。