范围内的随机数生成

问题描述 投票:0回答:1

我正在尝试打印80到100之间的随机数。但是,当我打印出该数字时,我得到的数字超过100?

Random num = new Random();
int percent = 80 + num.nextInt(100);
System.out.println(percent);
java random
1个回答
1
投票

您可以尝试这样的事情

下面有两种方法

int resultNumber = ThreadLocalRandom.current().nextInt(80, 100 + 1);
System.out.println(resultNumber);
Random num = new Random();
int min =80;
int max=100;
System.out.println(num.nextInt(max-min) + min);

0
投票

摘自Random#nextInt(int)的文档:

返回在0(包括)和指定值(不包括)之间的伪随机且均匀分布的int值,[...]

所以打给您

num.nextInt(100);

生成0(含)和100(不含)之间的数字。之后,将80添加到其中。因此,percent的结果范围是80(包括)到180(排除)。


解决方案

为了获得从80100的数字,您实际要做的是从020生成一个数字并将其添加到80的顶部。所以

int percent = 80 + num.nextInt(20);

一般公式是

int result = lowerBound + random.nextInt(upperBound - lowerBound);

注意

ThreadLocalRandom优于new Random(),它更快,因为它牺牲了线程安全性(您很可能不需要)。因此:

Random num = ThreadLocalRandom.current();

实际上,对于此用例,实际上还有一个附加的nextInt(int, int)方法。参见documentation

返回指定原点(包括)和指定界限(不包括)之间的伪随机整数值。

代码就是:

int percent = ThreadLocalRandom.current().nextInt(80, 100);

到目前为止,我所有的示例都假定100独占。如果希望它为inclusive,只需在其中添加1。因此,例如

int percent = ThreadLocalRandom.current().nextInt(80, 101);
© www.soinside.com 2019 - 2024. All rights reserved.