2

可能重复:
随机数生成器未按我计划的方式工作(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 !
            }
        }
4

2 回答 2

3

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

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);
    }
}
于 2012-08-09T19:28:39.667 回答
2

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

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

于 2012-08-09T19:27:15.220 回答