日期:2014-05-19  浏览次数:20426 次

非常非常之奇怪的问题,咋就这么不顺呢!!!!
public   static   string   StringGenerateRandom(int   length)
{
System.Text.StringBuilder   MyStringBuilder   =   new   System.Text.StringBuilder();
char[]   chars   =   "0123456789 ".ToCharArray();
int   index;
Random   rnd   =   new   Random();
for   (int   i   =   0;   i   <   length;   i++)
{
index   =   rnd.Next(chars.Length);
MyStringBuilder.Append(chars[index].ToString());
}
return   MyStringBuilder.ToString();
}
private   void   Button1_Click(object   sender,   System.EventArgs   e)
{
string   temp= " ";
for   (int   i=0;i <1000;i++)
{
temp=i.ToString()+ ": "+StringGenerateRandom(4)+ " <br> ";
Response.Write(temp);
}

}

private   void   Button2_Click(object   sender,   System.EventArgs   e)
{
this.TextBox1.Text=StringGenerateRandom(4);
}


生成4位随机数,Button1是生成一千次,Button2是一次一次生成。
结果是一次一次生成每次都不一样,这是正常的,而生成1000次的几乎都是重复的,调用的方法是一样的啊!
如果我在
temp=i.ToString()+ ": "+StringGenerateRandom(4)+ " <br> ";
设置一个断点,可以看到生成的值不一样,可不设置断点几乎生成一样的值,
为什么会这样呢????

------解决方案--------------------
把种子放到外间

Random rnd = new Random();

==》

放到函数外面
private static Random rnd = new Random();

原因嘛,是因为循环运行的太快了,所以每次随机种子的时间数都一样