2011-11-06 52 views
1

我試圖用c#做某種遊戲,它的loto遊戲有10列。計算機有產生6個號碼,以填補10列,我的代碼是這樣的:c中的Loto遊戲#

public static int[] Get() 
    { 
     int[] a = new int[6]; 
     System.Random r = new System.Random(); 
     bool flag; int val; 
     for (int i = 0; i < a.Length; ++i) 
     { 
      flag = false; 
      do 
      { 
       val = r.Next(1, 50); 
       for (int k = 0; k < i; ++k)  
        if (a[k] == a[i]) 
        { 
         flag = true; 
         break; 
        } 
       a[i] = val; 
      } while (flag); 
     } 
     return a; 
    } 
    public static void Main() 
    { 
     int[] a; 
     for (int i = 0; i < 10; ++i) 
     { 
      a = Get(); 
      foreach (int x in a) 
       Console.Write("{0} ", x); 
      Console.WriteLine(); 
     } 
    } 

但它提供了相同的結果,像

4 44 19 44 22 7 
4 44 19 44 22 7 
4 44 19 44 22 7 
4 44 19 44 22 7 
4 44 19 44 22 7 
4 44 19 44 22 7 
4 44 19 44 22 7 
4 44 19 44 22 7 
4 44 19 44 22 7 
22 29 28 15 33 6 

有啥錯在我的代碼。
謝謝

+0

[偶然的遭遇並非如此隨機](http://stackoverflow.com/questions/2727538/random-encounter-not-so-random) –

回答

1

由於隨機類的原因,其默認方法需要從計算機的當前時間開始計算,因此您在同一時間調用該方法,結果相同。您可以修改代碼如下

public static int[] Get(System.Random r) 
    { 
     int[] a = new int[6]; 
     bool flag; 
     int val; 

     for (int i = 0; i < a.Length; ++i) 
     { 
      flag = false; 

      do 
      { 
       val = r.Next(1, 50); 
       for (int k = 0; k < i; ++k) 
        if (a[k] == a[i]) 
        { 
         flag = true; 
         break; 
        } 
       a[i] = val; 
      } while (flag); 
     } 

     return a; 
    } 


    public static void Main() 
    { 
     int[] a; 
     System.Random r = new System.Random(); 

     for (int i = 0; i < 10; ++i) 
     { 
      a = Get(r); 

      foreach (int x in a) 
       Console.Write("{0} ", x); 
      Console.WriteLine(); 
     } 
    } 
+0

是其確定的可能重複現在:) – user1031757

4

Random類從系統時間播種。
當您連續拍攝很多Random時,它們最終會同時創建並使用相同的種子。

您應該在調用Get()時重複使用Random實例。