2013-12-20 31 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很樂意提供幫助 –