1

我注意到,在使用System.Random时,如果Next()在一毫秒内调用多次,它返回相同的数字(如果它具有相同的参数)。我假设随机算法以某种方式涉及系统的时间,并且依赖于它。

我想Next()在一毫秒内多次调用 - 有没有办法做到这一点,希望使用相同的 Random 类?如果没有,我将不胜感激任何解决此问题的资源/其他方法。

4

1 回答 1

6

这是因为当您初始化它的新实例时,Random它使用系统时钟作为种子。如果您这样做两次,并且足够接近,您最终将使用相同的种子,因此您将从两个实例中获得相同的随机数序列。

已经在评论中提到的解决方案是实例化一个Random对象,然后在其上重复调用 Next(),每次都会得到一个新的随机数。

var val1 = new Random().Next();
var val2 = new Random().Next(); // quite likely val1 and val2 will be the same

var rnd = new Random();
var val3 = rnd.Next();
var val4 = rnd.Next(); // very unlikely val3 and val4 will be the same
于 2013-07-25T16:12:46.567 回答