请注意,这种方法比方法更有偏见,效率更低,https://stackoverflow.com/a/738651/360211nextInt
实现此目的的一个标准模式是:
Min + (int)(Math.random() * ((Max - Min) + 1))
Java Math 库函数 Math.random() 在 的范围内生成一个双精度值。请注意,此范围不包括 1。[0,1)
为了首先获得特定的值范围,您需要乘以要覆盖的值范围的量级。
Math.random() * ( Max - Min )
这将返回一个值,其中“最大值-最小值”不包括在内。[0,Max-Min)
例如,如果需要,则需要覆盖五个整数值,以便使用[5,10)
Math.random() * 5
这将返回一个值,其中 5 不包含在内。[0,5)
现在,您需要将此范围向上移动到目标范围。您可以通过添加最小值来执行此操作。
Min + (Math.random() * (Max - Min))
现在,您将获得一个介于 .按照我们的例子,这意味着:[Min,Max)
[5,10)
5 + (Math.random() * (10 - 5))
但是,这仍然不包括,并且您获得了双倍值。为了包含该值,您需要向范围参数添加 1,然后通过强制转换为 int 来截断小数部分。这是通过以下方式实现的:Max
Max
(Max - Min)
Min + (int)(Math.random() * ((Max - Min) + 1))
你有它。范围内的随机整数值,或根据示例:[Min,Max]
[5,10]
5 + (int)(Math.random() * ((10 - 5) + 1))