请注意,此方法比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))