注意,该方法比下一个Int方法更偏向且效率更低,https://stackoverflow.com/a/738651/360211
实现这一点的一个标准模式是:
Min + (int)(Math.random() * ((Max - Min) + 1))
Java Math库函数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-Min)添加1,然后通过强制转换为int来截断小数部分。这可以通过以下方式实现:
Min + (int)(Math.random() * ((Max - Min) + 1))
在[Min,Max]范围内的随机整数值,或者按照示例[5,10]:
5 + (int)(Math.random() * ((10 - 5) + 1))