for (int i = 1; i <= 55; i++ )
{
System.Random myRandom = new System.Random();
//int myInt; 3 lines just alternate method
//myInt = myRandom.Next();
//System.Console.WriteLine(myInt);
System.Console.WriteLine(myRandom.Next());
Thread.Sleep(15); // if less, trouble
}
我不断获得相同数字的倍数,一次最多20个,而不是每个连续数字不同。出于某种原因,我添加了sleep语句,如果值为15或更大,它就可以工作。实际上,如果你增加睡眠参数值,你可以选择&#39;你得到多少连续重复的数字。设定范围没有区别。循环比随机数生成器快吗?这并不严重,我正在阅读这本书#34; Essential C#5.0&#34;。我看了至少五十个&#34;随机&#34;问题,但没有人涵盖这种现象。三个注释行是做同样事情的不同方式,我没有在同一个版本中执行它们。
答案 0 :(得分:1)
问题出在这一行:
System.Random myRandom = new System.Random();
它应该在for循环之外。为什么?因为它根据时间信息生成随机种子,并且当您一个接一个地创建它们时,它们每个都获得相同的种子。当线程在迭代之间休眠时,时间会发生变化,以便下一个Random
获得不同的种子值。
请改为尝试:
System.Random myRandom = new System.Random();
for(int i = 1; i <= 55; i++)
{
// Here be the rest of the code
}
现在,Random
对象只创建一次,只获取其种子值一次。