[英]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.