6 回答

TA贡献2039条经验 获得超8个赞
请注意,这种方法比nextInt
方法更有偏见且效率更低,https://stackoverflow.com/a/738651/360211
实现这一目标的一个标准模式是:
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值来完成此操作。
Min + (Math.random() * (Max - Min))
您现在将获得该范围内的值[Min,Max)
。按照我们的例子,这意味着[5,10)
:
5 + (Math.random() * (10 - 5))
但是,这仍然不包括Max
,你得到双倍的价值。为了获得Max
包含的值,您需要在range参数中添加1 (Max - Min)
,然后通过强制转换为int来截断小数部分。这是通过以下方式完成
Min + (int)(Math.random() * ((Max - Min) + 1))
你有它。范围内的随机整数值[Min,Max]
,或者根据示例[5,10]
:
5 + (int)(Math.random() * ((10 - 5) + 1))

TA贡献1779条经验 获得超6个赞
使用:
Random ran = new Random();
int x = ran.nextInt(6) + 5;
整数x现在是具有可能结果的随机数5-10。

TA贡献1842条经验 获得超13个赞
ThreadLocalRandom等效于多线程环境的类java.util.Random。在每个线程中本地执行生成随机数。因此,通过减少冲突,我们可以获得更好的表现。
int rand = ThreadLocalRandom.current().nextInt(x,y);
添加回答
举报