生成的随机数总是相等的

Ler*_*eri 1 c# random

我有一节课:

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

        return rand.Next() % 10 + 1;
    }
}
Run Code Online (Sandbox Code Playgroud)

它的2个对象:

MyClass obj1 = new MyClass();
MyClass obj2 = new MyClass();
Run Code Online (Sandbox Code Playgroud)

问题obj1.MyMethod() == obj2.MyMethod()始终存在.为什么会这样?什么是避免它的最佳方法?

Nik*_*wal 9

创建随机对象静态

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

   public int MyMethod()
   {
       return rand.Next() % 10 + 1;
   }
}
Run Code Online (Sandbox Code Playgroud)

随机工作System.DatTime.Now.Ticks.

如果我们喜欢这样的话

Random rand = new Random();
Run Code Online (Sandbox Code Playgroud)

在内部,它发生在

Random rand = new Random(System.DateTime.Now.Ticks);
Run Code Online (Sandbox Code Playgroud)

想一想系统时间中唯一不稳定的东西就是系统时间.

当使用Random类时,将其对象设置一次,并Next()在任何您想要的地方使用它的方法.当在循环内创建随机对象时,您将在循环中找到这种情况.

在您的代码中,它们是一个接一个地创建的,它们由相同的Ticks种子值创建.

创建随机对象静态然后它们将不相同.