可能重复:
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 :(得分:5)
Random()的文档明确涵盖了这一点:
默认种子值是从系统时钟派生的,并且是有限的 解析度。结果,创建了不同的Random对象 通过调用默认构造函数来关闭连续 相同的默认种子值,因此,将产生相同的 随机数集。
答案 1 :(得分: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值。 来自http://msdn.microsoft.com/en-us/library/system.random.aspx
答案 2 :(得分:1)
您只需要一个Random()
个实例 - 只需拨打.Next()
两次。
int a;
int aa;
Random aRand = new Random();
a = aRand.Next(20);
aa = aRand.Next(20);
答案 3 :(得分:1)
您的整个应用程序中不应该有多个随机变量。摆脱第二个
Random aaRand = new Random();
答案 4 :(得分:1)
看起来这两个实例使用相同的种子。
种子确定将生成的所有值以及以何种顺序生成。如果使用相同的种子创建200个Random实例,它们都会为您提供相同的输出。
在您的应用启动并重复使用时创建一个实例。