2013-12-20 21 views
1

这里有两个变化的一个range (start, end)内生成随机整数:在Java中,这些随机数生成不等于相同的范围吗?

方法1:

int rand = (int)(Math.random()*(end-start)+1)+start; 

方法2:

Random numbergenerator = new Random(); 
int rand=numbergenerator.nextInt(end-start)+start; 

方法2似乎为我工作。

我问这个问题的原因:我试图调试我的代码,当我将我的随机int代更改为方法2时,一切似乎都正常工作。方法1给出了意想不到的结果。

意外的结果来自不同的帖子:但这是这个问题的分心 仍然是here。在这里,我用方法2替换了mehtod 1,并且一切正常。

所以问题是这些随机int生成方法不同。 方法1我用这个已经upvoted post.

什么样的情况下,他们都可以不同(如果他们不同)?

+1

结果如何出乎意料? – 2013-12-20 02:12:28

+2

随机数字应该是意想不到的。这才是重点。 – Eran

+1

“*如果两者可能不同(如果它们不同),那么这将是一个例子*”您告诉我们!你观察到意想不到的结果! –

回答

3

鉴于您的意外结果来了from a sorting algorithm,我怀疑意外你的意思是它并没有真正地排序数字。

问题在于两种方法中随机数的范围都不相同。方法1的范围是[start+1 , end],方法2的范围是[start, end-1]

所以基本上在这里删除+1部分:

int rand = (int)(Math.random()*(end-start)+1)+start; 

,这样的范围是通常[start, end-1]。我通常说,因为阵列在[0, length-1]范围内索引。

+0

,很好地澄清它。谢谢! –

+0

@ user1988876很乐意提供帮助 –