C# 为什么这不创造一个“真实”的随机数?

C# 为什么这不创造一个“真实”的随机数?,c#,random,numbers,C#,Random,Numbers,可能重复: 我试图创建一个循环,在列表框中创建并输出5个随机数。基本上,它5次输出相同的随机数,而不是5次不同的随机数。当我使用断点并遍历代码时,它实际上生成了5个数字。那么为什么它只输出第一个答案呢?非常感谢。这不是整个项目,但我需要先让它工作 public string Numbertext1; public string Numbertext2; public int GeneratedNumbers; public int Average

可能重复:

我试图创建一个循环,在列表框中创建并输出5个随机数。基本上,它5次输出相同的随机数,而不是5次不同的随机数。当我使用断点并遍历代码时,它实际上生成了5个数字。那么为什么它只输出第一个答案呢?非常感谢。这不是整个项目,但我需要先让它工作

    public string Numbertext1;
    public string Numbertext2;       
    public int GeneratedNumbers;
    public int Average = 0;
    public int TotalSum = 0;
    public int TotalCalcs = 0;
    public int Counter = 0;

    private void btnRandomise_Click(object sender, EventArgs e)
    {
        Numbertext1 = txtNum1.Text;
        int Number1;
        int.TryParse(Numbertext1, out Number1);
        Numbertext2 = txtNum2.Text;
        int Number2;
        int.TryParse(Numbertext2, out Number2);

        do
        {

            Random num = new Random();
            int number = num.Next(Number1, Number2);
            lbNumbers.Items.Add(Convert.ToString(number));
            Counter++;
        }
        while (Counter < 5);
        {
            TotalCalcs++;
            Counter = 0;
        }


    }
}
}

您需要在全局级别初始化num变量。它一次又一次地使用同一个种子


放在这里:Random num=new Random;在顶部初始化其他所有内容。然后将其从方法内部删除。

这是因为您正在紧密循环中创建一个新的随机实例,所以种子数将是相同的。Random类在数学意义上不是真正的随机类,因此您应该更改种子或使用它的一个实例。移动随机数=新随机数;与其他变量一起添加到顶部。

因为您没有充分地为随机数生成器设置种子

生成器有一个它遵循的算法,如果您只是创建它而没有设定种子,那么您的数字每次都是相同的:

默认种子值源自系统时钟,具有有限分辨率。因此,通过调用默认构造函数连续创建的不同随机对象将具有相同的默认种子值,因此将生成相同的随机数集

要解决此问题,请使用另一个构造函数,该构造函数允许您指定种子-MSDN上有一个种子。类实例化是时间相关的。通过一个非常快速的循环,您每次都在创建相同的对象,因此您一次又一次地获得相同的值。您需要将实例化移到循环之外,以便在调用下一个时获得新的号码


这也是为什么使用断点检查值时它会起作用的原因。您创建的随机对象将具有不同的引用时间,因此会有所不同。

这是一个非常常见的问题,请参见。请确保您花时间查看您的问题以前是否没有被问过。我将不得不质疑您在while计数器<5行之后使用括号的问题。@IchabodClay它在技术上是合法的语法;-还有许多其他问题/即将出现的问题,例如无用的成员变量。