一尘不染

Random.Next返回始终相同的值[重复]

c#

这真的很奇怪,我不明白为什么会这样。在foreach循环中,我遍历A类集合,对于每个类,我都调用该Count()方法,其中r1r2数字是从范围[-1,1]中生成的。问题是
Random.Next每个实例返回相同的“随机”数字。当第一个实例的结果为0和-1时,后续实例将返回相同的结果。拜托,你能告诉我为什么会这样吗?另外,在每个A类实例中我都无法获得不同的结果。这是代码:

class a
{
 Random rnd = new Random();
 private void Count()
 {
  int r1 = rnd.Next(-1, 1);
  int r2 = rnd.Next(-1, 1);
 }
}
class b
{
 List<a> listofA=new list<a>();
 foreach (a ACLASS in listofA)
 {
  ACLASS.Count();
 }
}

阅读 522

收藏
2020-05-19

共1个答案

一尘不染

问题是您创建的Random类实例在时间上过于接近。

创建Random对象时,将使用系统时钟中的值作为对象的种子。如果创建的Random实例在时间上过于接近,则它们将全部使用相同的随机序列进行播种。

创建Random“ a”类的实例时,请创建一个对象并将其引用传递给构造函数,而不是Random为每个“ a”实例创建一个对象。

2020-05-19