为了账号安全,请及时绑定邮箱和手机立即绑定

如何在Java中生成特定范围内的随机整数?

如何在Java中生成特定范围内的随机整数?

长风秋雁 2019-05-21 14:57:58
如何int在特定范围内生成随机值?我试过以下,但那些不起作用:尝试1:randomNum = minimum + (int)(Math.random() * maximum);// Bug: `randomNum` can be bigger than `maximum`.尝试2:Random rn = new Random();int n = maximum - minimum + 1;int i = rn.nextInt() % n;randomNum =  minimum + i;// Bug: `randomNum` can be smaller than `minimum`.如何在Java中生成特定范围内的随机整数?
查看完整描述

6 回答

?
largeQ

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))


查看完整回答
反对 回复 2019-05-21
?
哆啦的时光机

TA贡献1779条经验 获得超6个赞

使用:


Random ran = new Random();

int x = ran.nextInt(6) + 5;

整数x现在是具有可能结果的随机数5-10。


查看完整回答
反对 回复 2019-05-21
?
慕莱坞森

TA贡献1810条经验 获得超4个赞

使用:

minimum + rn.nextInt(maxValue - minvalue + 1)


查看完整回答
反对 回复 2019-05-21
?
红颜莎娜

TA贡献1842条经验 获得超13个赞

ThreadLocalRandom等效于多线程环境的类java.util.Random。在每个线程中本地执行生成随机数。因此,通过减少冲突,我们可以获得更好的表现。


int rand = ThreadLocalRandom.current().nextInt(x,y);


查看完整回答
反对 回复 2019-05-21
  • 6 回答
  • 0 关注
  • 3212 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号