2012-06-13 41 views
4

我在C#中產生隨機數的問題隨機數每.Next()調用[Multiple .Next()in method]

我嘗試了所有我找到的解決方案。大多數我們只使用相同的隨機對象,每次只處理每個對象,而不是每個屬性。

所以我用這個作爲隨機數字的代碼:

private static readonly Random random = new Random(); 
private static readonly object syncLock = new object(); 

public static int RandomNumber(int min, int max) 
{ 
      lock (syncLock) 
      { // synchronize 
       return random.Next(min, max); 
      } 
} 

現在我想打電話給.Next()多次相同的方法,以生成一個隨機的對象:

public void StartDuiven() 
{ 
    for (int i = 0; i <= 6; i++) 
    { 
     var d = new Duif(); 
     d.Naam = /*NameGenerator.GenRandomFirstName() +" "+ NameGenerator.GenRandomLastName()*/ "Jantje"; 
     d.GeboorteDatum = DateTime.Now; 
     d.Snelheid = Genrator.RandomNumber(0, 4); 
     d.Vliegtechniek = Genrator.RandomNumber(0, 4); 
     d.Vormpeil = Genrator.RandomNumber(0, 4); 
     d.Conditie = Genrator.RandomNumber(0, 4); 
     d.Aerodynamica = Genrator.RandomNumber(0, 4); 
     d.Intelligentie = Genrator.RandomNumber(0, 4); 
     d.Libido = Genrator.RandomNumber(0, 4); 
     d.Nachtvliegen = Genrator.RandomNumber(0, 4); 
     d.Navigatie = Genrator.RandomNumber(0, 4); 
     d.Ervaring = Genrator.RandomNumber(0, 4); 
     d.Transfer = false; 

     int g = Genrator.RandomNumber(0, 2); // Edited 

     if (g == 0) 
     d.Geslacht = false; 
     else 
     d.Geslacht = true; 

     AddDuif(d); 
    } 
} 

每新對象我得到不同的號碼,但不是每次打電話。 Next()方法。

因此,所有屬性的值對於1個對象都是相同的。

我該如何解決這個問題?爲什麼我沒有在每個.Next()電話上獲得新的價值?

謝謝

再見!

回答

4

Random.Next(0, 1)將始終返回0。最大值是獨佔的。

+0

好吧,我讓那0,2即可。對每個.Next()調用返回的問題有任何想法? –

+0

+1回答... @JonasBohez - 隨機數字是隨機的,你爲什麼期望它們不同?您對「下一個數字不得重複先前」的限制使得非常特殊的分配,而不是由常規的隨機對象提供。 –

+0

Nvm在最後一個問題,這是我自己的錯在別的地方:/感謝編輯0,2,但 –

0

return (random.Next() % (max - min)) + min 
+0

它與這也工作,謝謝!雖然,我大聲疾呼,但我仍然在某處給予同樣的價值。 對不起,這浪費任何人的時間:(! –

2

由於嘗試鴿巢原理很難:)來獲得的[0-4範圍內5個不同的整數值)。

由於數字是隨機的,所以當所有數值相同時,您應該預期會有一些情況。

(除了通過@IngisKahn鑑定與Random.Next(0,1)使用錯誤)