【发布时间】:2012-12-09 11:57:34
【问题描述】:
人们通常会问为什么他们在使用Random 时总是得到相同的数字。在他们的情况下,他们无意中每次都创建一个 Random 的新实例(而不是只使用一个实例),这当然会导致始终相同的数字。但就我而言,我确实需要几个 Random 实例,它们返回不同的数字流。
在我看来,使用硬编码种子不是一个好主意,因为在重新启动程序后你会一次又一次地获得相同的值。这个呢:
int seed1 = (int)DateTime.Now.Ticks - 13489565;
int seed2 = (int)DateTime.Now.Ticks - 5564;
我知道这看起来很愚蠢和幼稚,但它会在每次重新启动后避免相同的值,并且两个种子应该不同。或者也许
Random helper = new Random();
int seed1 = helper.Next(1, int.MaxValue);
int seed2 = helper.Next(1, int.MaxValue);
如您所见,我在这里有点缺乏创意,需要您的帮助。谢谢。
【问题讨论】:
-
需要有创意吗?我看不出你的任何一种方法有任何问题。
-
您对使用随机数为不同的随机数生成器创建种子的想法对我来说似乎很好。在我读完这篇文章之前,这是我要建议的。
-
现在我想起来了,如果 PRNG 不是很聪明,那么可能第二种方法会出现问题
-
我仍然想不出为什么你需要两个不同的随机生成器,而不是一个提供两个流的随机生成器......
-
不,抱歉不准确。我只是不知道如何产生“强种子”。我的应用程序不需要在随机数方面非常精确,但我认为我的解决方案过于简单。