生成的随机数始终相等

我上课了:

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()总是如此。 为什么会这样? 什么是避免它的最佳方法?

创建随机对象静态

 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() 。 当在循环内创建随机对象时,您将在循环中找到这种情况。

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

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

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

这在网站上已被多次覆盖,您应该搜索其中一个答案。

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

您应该阅读这个问题及其答案,以找到更好的方法。