2012-08-09 52 views
2

可能重複:
Random number generator not working the way I had planned (C#)爲什麼在for語句中的隨機方法返回相同的結果?

我有回到9位串號的方法,如果我把這種方法能夠正常工作如我所料,但不是當我把它在循環語句,因爲它只生成一個數字並重復它。

下面是代碼:

private string GenerateRandomNumber() 
     { 
      Random r = new Random(); 
      return r.Next(111111111, 999999999).ToString(); 
     } 
     protected void btnSolo_Click(object sender, EventArgs e) 
     { 
      Response.Write(GenerateRandomNumber()); 
      // Every time I call this method , it return 9 digit random number wich is different with the previous call like : 146956595 
     } 
     protected void btnBulk_Click(object sender, EventArgs e) 
     { 
      for (int i = 0; i < 100; i++) 
      { 
       string randomNumber = GenerateRandomNumber(); 
       Response.Write("<br /> " + randomNumber); 
       //It create just one 9 digit number 100 times ! 
      } 
     } 
+2

這個問題解釋了原因:[隨機數生成器不工作,我已經計劃的方式(C#)](http://stackoverflow.com/questions/767999/random-number-generator-not-working-the -i-had-planned-c) – 2012-08-09 19:24:10

回答

3

使Random r = new Random();在類級別完成,並將r保存爲類變量。對Next的後續調用將不會生成相同的「隨機」值。

private static Random r = new Random(); 

private string GenerateRandomNumber() 
{ 
    return r.Next(111111111, 999999999).ToString(); 
} 

protected void btnSolo_Click(object sender, EventArgs e) 
{ 
    Response.Write(GenerateRandomNumber()); 
} 

protected void btnBulk_Click(object sender, EventArgs e) 
{ 
    for (int i = 0; i < 100; i++) 
    { 
     string randomNumber = GenerateRandomNumber(); 
     Response.Write("<br /> " + randomNumber); 
    } 
} 
+1

甚至在短時間內創建類的不同實例時,甚至可以創建隨機變量static。 – 2012-08-09 19:38:20

2

的GenerateRandomNumber()方法使用的系統時鐘作爲種子。

也就是說,它會對系統時鐘的當前值執行復雜的計算,因爲計算機上無法實現真正​​的隨機性。事情是CPU太快了,你可能正在運行你的循環,並獲得相同的值,因爲時間幾乎沒有改變(如果有的話)。嘗試循環更多的迭代,看看會發生什麼,最終隨機值應該改變。

相關問題