C# 为什么在这段代码中我总是得到两个相同的随机值?

C# 为什么在这段代码中我总是得到两个相同的随机值?,c#,random,C#,Random,可能重复: 我有以下代码: 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 + "

可能重复:

我有以下代码:

        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并不总是一样的,但是他们总是一样的


谢谢

您只需要一次随机呼叫。下一次两次


为什么要创建两个不同的随机变量?您可以只使用一个:

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类的无参数构造函数使用系统时钟生成其种子值,而其参数化构造函数可以根据当前时间的节拍数获取Int32值。

文件中明确说明了这一点:

默认种子值源自系统时钟,具有有限的 决议因此,在中创建的不同随机对象 通过调用默认构造函数关闭继承将具有 相同的默认种子值,因此将产生相同的 随机数的集合


在整个应用程序中,不应该有多个随机变量。除掉第二个

Random aaRand = new Random();

看起来这两个实例使用的是相同的种子

种子确定将生成的所有值及其顺序。如果您使用相同的种子创建了200个Random实例,它们都将提供相同的输出


在应用程序启动时创建一个实例并重用它

c语言是正确的,sry。是的,我只做了一个,它成功了。谢谢
Random aaRand = new Random();