生成的随机数总是相等[复制](Generated random numbers are always

2019-06-24 11:11发布

这个问题已经在这里有一个答案:

  • 随机数发生器只有生成一个随机数 9回答

我有一个类:

public class MyClass
{
    public int MyMethod()
    {
        Random rand = new Random();

        return rand.Next() % 10 + 1;
    }
}

2点它的对象:

MyClass obj1 = new MyClass();
MyClass obj2 = new MyClass();

问题是, obj1.MyMethod() == obj2.MyMethod()始终。 为什么会发生? 什么是避免它的最佳方式?

Answer 1:

创建随机对象静态

public class MyClass
{
   public static Random rand = new Random();

   public int MyMethod()
   {
       return rand.Next() % 10 + 1;
   }
}

随机适用于System.DatTime.Now.Ticks

如果我们做这样的

Random rand = new Random();

在内部它发生的

Random rand = new Random(System.DateTime.Now.Ticks);

试想想了一会儿这是不是在系统不变的唯一的事情是系统时间。

当曾经使用Random类使其对象一次,并使用它的方法Next()任何你想去的地方。 当循环中的创建随机对象,你会发现在循环这种情况。

在你的代码在创建了一个又一个,他们得到同样的蜱种价值创造。

创建随机对象的静态,然后他们将不一样。



Answer 2:

要创建一个新的Random每次。 当您创建的新实例Random而不显式指定的种子值,它使用System.DatTime.Now.Ticks作为种子。 由于它们在相同的“滴答”破天因此使用相同的种子值调用的速度。 由于所有的随机实例生成的“随机”数完全相同的序列相同的种子值是由两个实例生成相同的“随机”值。

这已经在网站上之前覆盖了很多次,你应该寻找这些问题的答案之一。

但基本上,你需要创建Random一次的对象和重用。 这可以静态完成,或者至少为类变量。

你应该阅读这个问题和它的答案找到一个更好的方法。



文章来源: Generated random numbers are always equal [duplicate]
标签: c# random