为什么我在这段代码中不断获得两个相同的随机值?

时间:2011-10-01 22:18:49

标签: c# random

  

可能重复:
  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并不总是一样,但它们一直都是一样的。

由于

5 个答案:

答案 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实例,它们都会为您提供相同的输出。

在您的应用启动并重复使用时创建一个实例。