簡體   English   中英

C#中的Loto游戲

[英]Loto game in c#

我試圖用C#制作某種游戲,它的Loto游戲有10列。 計算機必須生成6個數字來填充10列,我的代碼如下:

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

所以我的代碼出了什么問題。
謝謝

Random類是從系統時間開始的。
當您連續創建許多Random ,它們最終將同時創建並使用相同的種子。

您應該在對Get()調用中重新使用Random實例。

由於使用隨機類,它的默認方法占用了計算機當前時間,因此您同時調用該方法,結果是相同的。 您可以如下修改代碼

 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();
        }
    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM