为什么for语句中的随机方法返回相同的结果?

时间:2012-08-09 19:22:51

标签: c# .net random

  

可能重复:
  Random number generator not working the way I had planned (C#)

我有一个返回9位字符串编号的方法,如果我调用此方法它可以正常工作,但是当我在循环语句中调用它时,因为它只生成一个数字并重复它。

以下是代码:

private string GenerateRandomNumber()
        {
            Random r = new Random();
            return r.Next(111111111, 999999999).ToString();
        }
        protected void btnSolo_Click(object sender, EventArgs e)
        {
            Response.Write(GenerateRandomNumber());
            // Every time I call this method , it return 9 digit random number wich is different with the previous call like : 146956595  
        }
        protected void btnBulk_Click(object sender, EventArgs e)
        {
            for (int i = 0; i < 100; i++)
            {
                string randomNumber = GenerateRandomNumber();
                Response.Write("<br /> " + randomNumber);
                //It  create just one 9 digit number 100 times !
            }
        }

2 个答案:

答案 0 :(得分:3)

在类级别完成Random r = new Random();,并将r保存为类变量。对Next的后续调用不会生成相同的&#34;随机&#34;值。

private static Random r = new Random();

private string GenerateRandomNumber()
{
    return r.Next(111111111, 999999999).ToString();
}

protected void btnSolo_Click(object sender, EventArgs e)
{
    Response.Write(GenerateRandomNumber());
}

protected void btnBulk_Click(object sender, EventArgs e)
{
    for (int i = 0; i < 100; i++)
    {
        string randomNumber = GenerateRandomNumber();
        Response.Write("<br /> " + randomNumber);
    }
}

答案 1 :(得分:2)

GenerateRandomNumber()方法使用系统时钟作为种子。

也就是说,它对系统时钟的当前值执行复杂的计算,因为在计算机上无法实现真正​​的随机性。事情是CPU是如此之快,以至于您可能正在运行循环并获得相同的值,因为时间几乎没有变化(如果有的话)。尝试循环以进行更多迭代,看看会发生什么,最终随机值应该改变。