如何生成随机 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条答案
按热度按时间ie3xauqp16#
我发现这个例子可以生成随机数:
本例生成特定范围内的随机整数。
此类的示例运行:
disho6za17#
下面是一个生成随机变量的有用类
ints
在包含/排除边界的任意组合的范围内:ecfsfe2w18#
这种方法使用起来可能很方便:
此方法将返回所提供的最小值和最大值之间的随机数:
此方法将从提供的最小值和最大值中返回一个随机数(因此生成的数字也可以是最小值或最大值):
kmb7vmvb19#
另一种选择是使用apache commons:
iaqfqrcu20#
请注意,这种方法比传统方法更偏颇,效率更低
nextInt
接近,https://stackoverflow.com/a/738651/360211实现这一点的一个标准模式是:
java数学库函数math.random()生成一个范围内的双精度值
[0,1)
. 请注意,此范围不包括1。为了首先得到一个特定的值范围,需要乘以要覆盖的值范围的大小。
这将返回范围内的值
[0,Max-Min)
,其中不包括“max min”。例如,如果你想
[5,10)
,您需要覆盖五个整数值,以便使用这将返回范围内的值
[0,5)
,其中不包括5。现在你需要把这个范围移到你的目标范围。您可以通过添加最小值来实现这一点。
您现在将获得范围内的值
[Min,Max)
. 以我们为例,这意味着[5,10)
:但是,这还不包括
Max
你得到了一个双倍的值。为了得到Max
如果包含值,则需要在range参数中添加1(Max - Min)
然后通过强制转换为int来截断小数部分。这是通过以下方式实现的:就在这里。范围内的随机整数值
[Min,Max]
,或根据示例[5,10]
:e37o9pze21#
只需使用随机类:
niknxzdl22#
下面是一个简单的示例,演示如何从闭合的
[min, max]
范围,而min <= max is true
您可以在hole类中将其作为字段重用,同时还具有Random.class
方法在一个地方结果示例:
资料来源:
exdqitrt23#
kq0g1dla24#
我想知道apachecommons数学库提供的任何随机数生成方法是否符合要求。
例如:
RandomDataGenerator.nextInt
或者RandomDataGenerator.nextLong
ikfrs5lh25#
我用这个:
如果需要,可以将其转换为整数。
irtuqstp26#
只需执行以下语句:
下面是它的源代码
随机发生器.java
它只是简单明了。
wwwo4jvm27#
ThreadLocalRandom
类的等价物java.util.Random
对于多线程环境。在每个线程中本地生成随机数。因此,通过减少冲突,我们可以获得更好的性能。ctzwtxfj28#
在java 1.7或更高版本中,执行此操作的标准方法如下:
请参阅相关的javadoc。这种方法的优点是不需要显式初始化java.util.random示例,如果使用不当,这可能会导致混淆和错误。
然而,相反地,没有办法显式地设置种子,因此在测试或保存游戏状态或类似的情况下,很难再现有用的结果。在这些情况下,可以使用下面所示的Java1.7之前的技术。
在java 1.7之前,标准方法如下:
请参阅相关的javadoc。实际上,java.util.random类通常比java.lang.math.random()更好。
特别是,当标准库中有一个简单的api来完成任务时,就不需要重新设计随机整数生成轮。
2w2cym1i29#
让我们举个例子。
假设我希望生成一个介于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
因此我们得到了所需的范围。
vd2z7a6w30#
用途: