2012-08-09 51 views
2

可能重复:
Random number generator not working the way I had planned (C#)为什么在for语句中的随机方法返回相同的结果?

我有回到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

这个问题解释了原因:[随机数生成器不工作,我已经计划的方式(C#)](http://stackoverflow.com/questions/767999/random-number-generator-not-working-the -i-had-planned-c) – 2012-08-09 19:24:10

回答

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); 
    } 
} 
+1

甚至在短时间内创建类的不同实例时,甚至可以创建随机变量static。 – 2012-08-09 19:38:20

2

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

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

相关问题