2013-10-05 52 views
1
public void pickWinner() { 
     int last = list.size() - 1; 
     int number = (int)Math.random()*last; 
     System.out.println("And the winner is..."); 
     Student winner = list.get(number); 
     System.out.println(winner); 
} 

我在生成ArrayList中的第一項以外的其他贏者時遇到問題。我認爲這是Math.random()的一個問題,因爲我的ArrayList的大小似乎是正確的,但它似乎只生成0來獲得我的ArrayList中的第一項。我能做些什麼來解決這個問題?使用ArrayList大小的Math.random範圍

回答

4

試試這個:

int number = (int)(Math.random()*last); 

問題是你乘前正在鑄造的Math.random價值爲int。演員有更高的運算符優先級(完整列表,請參閱http://introcs.cs.princeton.edu/java/11precedence/

此外,您的代碼永遠不會選擇列表中的最後一名學生,您不應該-1'最後'整數。

您也可以考慮使用Random類,即new java.util.Random().nextInt(list.size());,因此您不必擔心劇集以及如何整數。如果需要多次執行,您甚至可以重新使用Random實例。

+0

太謝謝你了。這工作完美。我試圖弄清楚我犯了什麼愚蠢的錯誤。 – user1730357

1

Math.random()生成0.01.0之間的數字。您在最後一次執行整數轉換之前進行整數轉換,因此隨機數將降至0,然後總體結果將始終爲零。

int number = (int)(Math.random()*last); 

應該工作正常