2012-01-27 81 views
0

可能重複:
Random number generator not working the way I had planned (C#)寫入文件的隨機數C#

我在C#中的代碼,但我得到的結果相同的號碼,有什麼錯?

像A21,A21,A21 ....

 String c = ""; 
     int randomNumber = 0; 
     for (int i = 0; i < 20; i++) 
     { 
      randomNumber = RandomNumber(0, 617); 
      c += "a " + randomNumber + ", ";      
     } 
     file.WriteLine(c); 



I am using this function 

public static int RandomNumber(int min, int max) 
    { 
     Random random = new Random(); 
     return random.Next(min, max); 
    } 
+0

是種子在c#不必要? – clime 2012-01-27 22:07:29

+4

默認種子是默認構造函數中的當前時間 - 由於當前循環之間的時間非常快,它們都具有相同的種子。 – 2012-01-27 22:08:15

+0

我怎麼能生成20個不同的隨機數字? – cMinor 2012-01-27 22:21:36

回答

7

您應該通過Random作爲參數傳遞給你的函數。儘管你的功能已經沒有附加值了。

var rnd = new Random(); 
for (int i = 0; i < 20; i++) 
{ 
    randomNumber = RandomNumber(rnd ,0, 617); 
    c += "a " + randomNumber + ", ";      
} 

public static int RandomNumber(Random rnd, int min, int max) 
{ 
    return rnd.Next(min, max); 
} 

它使用的是時鐘初始化你做new Random()每次。這意味着在一個緊密的循環中,您可以獲得相同的價值。您應該保留一個單個的Random實例,並在同一個實例上繼續使用Next。

https://stackoverflow.com/a/768001/284240

編輯:我讀了您要在給定範圍內創建20倍獨特的數字您的評論,這裏是使用HashSet<int>一個辦法:

HashSet<int> uniqueNumber = new HashSet<int>(); 
var rnd = new Random(); 
while(uniqueNumber.Count<20){ 
    var nextNum = rnd.Next(0, 617); 
    uniqueNumber.Add(nextNum); 
} 
3

Random需求實例被實例化一次。

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

在您的實現,random漸漸實例與系統時鐘多次爲一個時間單位讓你在使用完全相同的種子值極少數迭代,這對於單個呼叫意味着你將總是從Next獲得相同的值。

0

將RandomNumber的隨機外即

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