2010-05-25 49 views
0

我有這樣的代碼:在2個循環中隨機,我需要重新初始化嗎?

Random r = new Random(); 
while (mStack[step].hasNext()) { 
int rand = r.nextInt(length); 
for (int i = rand; i < length+rand; i++) { 
    //use of i and rand     
} 
} 

而這一切在遞歸調用。

這會爲每次迭代播種一個新的隨機數,對每次遞歸調用都不同?

或者我必須使用

while (mStack[step].hasNext()) { 
Random r = new Random(); 
int rand = r.nextInt(length); 
for (int i = rand; i < length+rand; i++) { 
    //use of i and rand     
} 
} 

請指點

+0

您是否檢查了rand的輸出值? – John 2010-05-25 19:56:00

+3

爲什麼你想爲每個電話隨機播種?這實際上可能會導致隨機數的減少 - 任何使用Random都需要一個種子,因爲它只是告訴它從算法/表格等開始。除此之外,這些數字將是僞隨機的。 – aperkins 2010-05-25 19:58:12

回答

4

不斷重播是不利的。創建一個Random的實例,並將其作爲遞歸方法的參數傳遞給堆棧。

Java 6中的no-arg Random構造函數使用實例計數器和當前值System.nanoTime()的和作爲種子。當然,nextInt()不會進行重播。

1

您需要使用下面的例子中。頂部的示例將在每次調用包含方法時重新初始化。第二個會爲堆棧中的每個項目這樣做,這意味着循環中的每個迭代。