请注意,此方法比https://stackoverflow.com/a/738651/360211的nextInt
方法更具偏见且效率较低
实现此目的的一种标准模式是:
Min + (int)(Math.random() * ((Max - Min) + 1))
该爪哇数学库函数的Math.random()生成的范围内的双值[0,1)
。请注意,此范围不包括1。
为了首先获得特定的值范围,您需要乘以要覆盖的值范围的大小。
Math.random() * ( Max - Min )
这将返回范围内的值[0,Max-Min)
,其中不包括“ Max-Min”。
例如,如果需要[5,10)
,您需要覆盖五个整数值,因此您可以使用
Math.random() * 5
这将返回范围内的值[0,5)
,其中不包括5。
现在,您需要将此范围上移到您要定位的范围。您可以通过添加最小值来实现。
Min + (Math.random() * (Max - Min))
您现在将获得范围内的值[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))