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