在区间 [x, y] 内随机获取一个整数?

47

可能重复:
Java: generating random number in a range

我如何生成一个随机整数i,使得i属于区间 (0,10]

我尝试使用以下代码:

Random generator = new Random();
int i = generator.nextInt(10);

但是它给我返回了 [0,10) 之间的值。

而在我的情况下,我需要它们是 (0,10]

3个回答

83
Random generator = new Random(); 
int i = generator.nextInt(10) + 1;

这将生成范围在[1, 11)内的整数。 - Nick Meyer
24
现在我意识到我们谈论的是整数,所以它们其实相同 :) - Nick Meyer
嗯,加上“1”肯定可以解决问题,但我就是不明白为什么这个方法不能处理范围的起始和结束两个参数?! - thorinkor
1
@thorinkor 传递两个整数需要将两个值复制到堆栈中以在方法内部使用。在这种情况下,值“1”的唯一目的是基本加法。没有理由为可以在不到一行代码的时间内在外部完成的单个操作引入额外的开销。 - bindsniper001
3
这段话的意思是,“它让代码更加简洁,就像isEmpty()方法一样,你可以直接用.size() == 0。” - Sled

15

怎么样:

Random generator = new Random();
int i = 10 - generator.nextInt(10);

2
聪明得分+1 1/2,愚钝扣0.5分。 - Skip Head
1
是的,绝对是钝角。我最初想到的是实数,但至少对于整数仍然有效! :) - Nick Meyer

5

只需将结果加1,就可以将[0, 10)转换为(0,10](对于整数)。 [0, 10)只是表达[0,9]的一种更混乱的方式,而(0,10]则表示[1,10](对于整数)。


添加 "1" 肯定解决了问题,但我就是不明白为什么这个方法不能处理范围的两个参数 - 开始和结束?! - thorinkor

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接