Possible Duplicate:
Why does this Random Number Generator not random?




我有这个测试程序:

static void Main(string[] args)
{
    var randomNumbers = new Dictionary<int, int>();
    foreach (var s in Enumerable.Range(1, 500))
    {
        var rand = Rand5();
        if (!randomNumbers.ContainsKey(rand))
            randomNumbers.Add(rand, 1);
        else
            randomNumbers[rand] += 1;
    }

    randomNumbers
        .ToList()
        .ForEach(x => Console.WriteLine("{0}: {1}", x.Key, x.Value));
    Console.ReadLine();
}

static int Rand5()
{
    System.Threading.Thread.Sleep(1);
    return new Random().Next(1, 6);
}



如果我注释掉System.Threading.Thread.Sleep(1);,我得到

5: 500


但是,如果我取消注释该行,则会得到随机数。

2: 87
4: 94
1: 116
5: 108
3: 95


为什么代码行很重要?谢谢!

最佳答案

正如其他人所说,new Random()从当前系统时间播种随机数生成器。

an article对此进行了更详细的描述,包括问题的解决方案,您可能会发现它很有用。基本上,您想多次使用同一Random实例-但要注意它不是线程安全的。

07-24 13:23