2011-10-01 50 views
1

可能重複:
Why does it appear that my random number generator isn't random in C#?爲什麼我在這段代碼中保持兩個相同的隨機值?

我有以下代碼:

 int a; 
     int aa; 

     Random aRand = new Random(); 
     Random aaRand = new Random(); 

     a = aRand.Next(20); 
     aa = aaRand.Next(20); 

     //if (a == aa) 
     { 
      Console.WriteLine(a + " " + aa); 
      Console.ReadLine(); 
     } 

我假設aRand和aaRand將是兩個不同的值,但是這不是案子。我究竟做錯了什麼?我假設aRand和aaRand並不總是相同的,但他們始終保持相同的狀態。

感謝

+0

我們可以澄清這是什麼語言,它看起來像C#。 – Caimen

+0

c#正確的語言,斯里。 – Liger86

回答

1

你只需要Random()一個實例 - 只需撥打.Next()兩次。

int a; 
int aa; 

Random aRand = new Random(); 

a = aRand.Next(20); 
aa = aRand.Next(20); 
3

爲什麼要創建兩個不同的隨機變量?你可以只使用一個:

int a; 
int aa; 

Random aRand = new Random(); 

a = aRand.Next(20); 
aa = aRand.Next(20); 

//if (a == aa) 
{ 
    Console.WriteLine(a + " " + aa); 
    Console.ReadLine(); 
} 

編輯: 「隨機數生成的種子值開始。如果相同的種子被反覆使用,會產生相同的一系列數字的一種方式,以產生不同的序列中。使種子值具有時間依賴性,從而與Random的每個新實例產生不同的系列。默認情況下,Random類的無參數構造函數使用系統時鐘生成其種子值,而其參數化構造函數可以使用Int32值基於當前時間的滴答數「 from http://msdn.microsoft.com/en-us/library/system.random.aspx

+0

是的,我做了一個,它的工作。謝謝 – Liger86

5

這是明確的海灣紅色在docs爲Random()

默認種子值被從系統時鐘導出,並且具有有限 分辨率。因此,通過調用默認構造函數在 中創建的不同Random對象將具有相同的默認種子值,因此將產生相同的 組隨機數。

1

在整個應用程序中永遠不應該有多個隨機變量。擺脫第二個

Random aaRand = new Random(); 
1

它看起來像兩個實例使用相同的種子。

種子確定將生成的所有值以及以何種順序。如果使用相同的種子創建200個Random實例,則它們都會給你相同的輸出。

當您的應用程序啓動並重新使用時創建一個實例。

相關問題