我正在尝试打印80到100之间的随机数。 但是,当我打印出这个数字时,我得到的数字超过了100?
Random num = new Random();
int percent = 80 + num.nextInt(100);
System.out.println(percent);
答案 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
(不包括)。
为了获取从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
是专有的。如果希望它包含在包含中,只需向其添加1
。例如
int percent = ThreadLocalRandom.current().nextInt(80, 101);