我正在尝试打印80到100之间的随机数。但是,当我打印出该数字时,我得到的数字超过100?
Random num = new Random();
int percent = 80 + num.nextInt(100);
System.out.println(percent);
您可以尝试这样的事情
下面有两种方法
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);
摘自Random#nextInt(int)的文档:
返回在
0
(包括)和指定值(不包括)之间的伪随机且均匀分布的int值,[...]
所以打给您
num.nextInt(100);
生成0
(含)和100
(不含)之间的数字。之后,将80
添加到其中。因此,percent
的结果范围是80
(包括)到180
(排除)。
为了获得从80
到100
的数字,您实际要做的是从0
到20
生成一个数字并将其添加到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);