2009-06-17 88 views
6

我試圖在我for循環中每次調用RandomNumber方法時生成一個不同的隨機數。現在,它每次都返回相同的數字。RandomNumber方法每次都會返回相同的數字

這是我RandomNumber方法:

private int RandomNumber(int min, int max) 
    { 
     Random random = new Random(); 
     return random.Next(min, max); 
    } 

這是我使用它在上下文:(這只是因爲我一直在努力得到它的工作搞亂有點亂....)

 for (int i = 0; i < charsRaw.Length; i++) 
     { 
      int max = charsRaw.Length - 1; 
      int rand = 0; 
      rand = RandomNumber(0, max); 

      charsNew[i] = charsRaw[rand]; 
      text2 += charsNew[i]; 

     } 

我似乎無法讓它在每次使用for循環調用時返回不同的值。

雖然,當我在text2 + = charsNew [i]之後插入一個MessageBox.Show(rand.ToString())時,它每次都給我一個不同的值,並按照我的意圖工作。奇怪。

謝謝! 埃裏克

回答

17

實例化隨機一次。在同一個實例上多次調用.Next()。

MSDN

隨機數生成從種子值開始 。如果相同的種子是反覆使用 ,產生

同一系列 數字如果你想多次實例化的隨機,使用不同的種子各一次。

+0

謝謝!這工作! – Eric 2009-06-17 03:21:40

+4

最後一段有點誤導。新的Random()就是這樣做的,即用當前時間爲發生器播種。既然你在一個緊密的循環中做了這個,你會得到許多相同的實例,當然這些實例會產生相同的序列。用現在的時間手動播種並不能使這裏的事情變得更好。此外,你會在種子中獲得非常多的線性依賴關係,這對大多數生成器的隨機性來說是一件壞事(參見http://portal.acm.org/citation.cfm?doid=1276927.1276928) – Joey 2009-06-17 04:55:44

1

沒有什麼說真正的隨機序列不能每次都是相同的數字! :-)有一個小概率它是合法的,所以你永遠不能確定。 鴨子蓋

相關問題