我有一个类:
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()
任何你想去的地方。 当循环中的创建随机对象,你会发现在循环这种情况。
在你的代码在创建了一个又一个,他们得到同样的蜱种价值创造。
创建随机对象的静态,然后他们将不一样。
要创建一个新的Random
每次。 当您创建的新实例Random
而不显式指定的种子值,它使用System.DatTime.Now.Ticks
作为种子。 由于它们在相同的“滴答”破天因此使用相同的种子值调用的速度。 由于所有的随机实例生成的“随机”数完全相同的序列相同的种子值是由两个实例生成相同的“随机”值。
这已经在网站上之前覆盖了很多次,你应该寻找这些问题的答案之一。
但基本上,你需要创建Random
一次的对象和重用。 这可以静态完成,或者至少为类变量。
你应该阅读这个问题和它的答案找到一个更好的方法。