C#System.Random需要睡眠才能工作

时间:2014-11-09 05:58:44

标签: c# random

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;问题,但没有人涵盖这种现象。三个注释行是做同样事情的不同方式,我没有在同一个版本中执行它们。

1 个答案:

答案 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对象只创建一次,只获取其种子值一次。