猿问

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

如何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中生成特定范围内的随机整数?

长风秋雁
浏览 3214回答 6
6回答

largeQ

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

哆啦的时光机

使用:Random ran = new Random();int x = ran.nextInt(6) + 5;整数x现在是具有可能结果的随机数5-10。

慕莱坞森

使用:minimum + rn.nextInt(maxValue - minvalue + 1)

红颜莎娜

ThreadLocalRandom等效于多线程环境的类java.util.Random。在每个线程中本地执行生成随机数。因此,通过减少冲突,我们可以获得更好的表现。int rand = ThreadLocalRandom.current().nextInt(x,y);
随时随地看视频慕课网APP

相关分类

Java
JavaScript
我要回答