C# 为什么for语句中的随机方法返回相同的结果?
可能重复:C# 为什么for语句中的随机方法返回相同的结果?,c#,.net,random,C#,.net,Random,可能重复: 我有一个方法,它返回9位的字符串数字,如果我调用这个方法,它会像我预期的那样正常工作,但在循环语句中调用它时不会,因为它只生成一个数字并重复它 代码如下: private string GenerateRandomNumber() { Random r = new Random(); return r.Next(111111111, 999999999).ToString(); } pr
我有一个方法,它返回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 !
}
}
private string GenerateRandomNumber()
{
随机r=新随机();
返回r.Next(1111111119999999).ToString();
}
受保护的void btonsolo\u单击(对象发送方,事件参数e)
{
Write(GenerateRandomNumber());
//每次调用此方法时,它都返回9位随机数,这与以前的调用不同,如:146956595
}
受保护的无效btnBulk_单击(对象发送者,事件参数e)
{
对于(int i=0;i<100;i++)
{
字符串randomNumber=GeneratorAndomNumber();
响应。写入(“
”+随机数);
//它只创建一个9位数的数字100次!
}
}
GenerateRandomNumber()方法使用系统时钟作为种子
也就是说,它对系统时钟的当前值执行复杂的计算,因为在计算机上不可能实现真正的随机性。问题是CPU速度太快了,您可能正在运行循环并获得相同的值,因为时间几乎没有变化(如果有变化的话)。尝试循环更多的迭代,看看会发生什么,最终随机值应该会改变。Make
random r=new random()代码>可以在类级别完成,并将r
保存为类变量。对Next
的后续调用不会生成相同的“随机”值
private static Random r=new Random();
私有字符串生成器域编号()
{
返回r.Next(1111111119999999).ToString();
}
受保护的void btonsolo\u单击(对象发送方,事件参数e)
{
Write(GenerateRandomNumber());
}
受保护的无效btnBulk_单击(对象发送者,事件参数e)
{
对于(int i=0;i<100;i++)
{
字符串randomNumber=GeneratorAndomNumber();
响应。写入(“
”+随机数);
}
}
这个问题解释了为什么:如果在短时间内创建了类的不同实例,甚至可以将随机变量设置为静态。
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);
}
}