可能重复:
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 !
}
}
答案 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是如此之快,以至于您可能正在运行循环并获得相同的值,因为时间几乎没有变化(如果有的话)。尝试循环以进行更多迭代,看看会发生什么,最终随机值应该改变。