2

我有一堂课:

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

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

它的两个对象:

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

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

4

2 回答 2

10

创建你的随机对象静态

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 种子值创建的。

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

于 2012-05-15T09:40:21.643 回答
0

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

这已经在网站上多次介绍过,您应该搜索其中一个答案。

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

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

于 2012-05-15T09:40:32.777 回答