考虑这种方法:
private static int GenerateRandomNumber(int seed, int max)
{
return new Random(seed).Next(max);
}
Run Code Online (Sandbox Code Playgroud)
在我的机器上,执行此循环会产生相同数量的1500次迭代:
for (int i = 0; i < 1501; i++)
{
int random = GenerateRandomNumber(100000000, 999999999);
Console.WriteLine(random.ToString());
Console.ReadKey();
}
Run Code Online (Sandbox Code Playgroud)
每次迭代我得到145156561.
我没有一个紧迫的问题,我只是好奇这个问题的原因.接下来(最大值)说:"返回一个非负随机比指定的最大数量较少,也许我不理解一些基本的东西.
Ree*_*sey 40
你总是使用相同的种子播种一个新实例,然后抓住第一个最大值.通过使用种子,您可以保证相同的结果.
如果你想要一个产生不同结果的静态随机数生成,你应该重做一下.但是,由于Random不是线程安全的,因此静态使用时需要一些同步.就像是:
private static Random random;
private static object syncObj = new object();
private static void InitRandomNumber(int seed)
{
random = new Random(seed);
}
private static int GenerateRandomNumber(int max)
{
lock(syncObj)
{
if (random == null)
random = new Random(); // Or exception...
return random.Next(max);
}
}
Run Code Online (Sandbox Code Playgroud)
迪尔伯特在2001年遇到了同样的问题:
http://dilbert.com/strips/comic/2001-10-25/
巧合?
我不这么认为.
random.org同意:http://www.random.org/analysis/