一定范围内的随机数生成

时间:2019-10-26 11:57:19

标签: java random

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

Random num = new Random();
int percent = 80 + num.nextInt(100);
System.out.println(percent);

2 个答案:

答案 0 :(得分: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);

答案 1 :(得分:1)

说明

摘自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专有的。如果希望它包含在包含中,只需向其添加1。例如

int percent = ThreadLocalRandom.current().nextInt(80, 101);
相关问题