随机类总是在两个类之间返回相同的数字

时间:2018-01-16 16:36:08

标签: c# random

我有一个滚动两个模具的程序。骰子是从Dice类创建的对象。 Dice类包含一个方法,该方法返回1和骰子包含的边数之间的随机数。像这样:

class Dice
{
    //field
    private int sides;
    private Random rand = new Random();

    //Constructor omitted for brevity

    //public method to roll the dice.
    public int rollDie()
    {
        return rand.Next(sides) + 1;
    }
}

这适用于一个骰子。但是,当我创建两个die并同时运行两个rollDie方法时,我总是在两个die对象之间收到相同的数字。例如:

Dice dice1 = new Dice(6); //created two die with 6 sides each.
Dice dice2 = new Dice(6);

dice1.rollDie(); //problem functions
dice2.rollDie();

这两个函数将始终返回相同的数字,即(1,1),(2,2)等......永远不会偏离此模式。

从我的研究中,我得出结论,随机对象是从系统的时间创建一个随机数,因为这两种方法几乎在同一时刻完成,它们从同一时间返回一个随机数种子。这显然是一个问题,因为它远非现实。

到目前为止,我尝试过的唯一解决方案,也是我唯一能想到的解决方案,就是为我的Random对象中使用的每个Dice对象定义自己的种子,但这似乎每次都返回相同的数字每次运行程序时都会调用rollDie方法(即每次运行程序时,它将返回(2,5),(1,3),种子分别为1和2。

我的问题是,是否有任何方法可以阻止两个对象返回与另一个对象相同的数字?

1 个答案:

答案 0 :(得分:-1)

两个骰子对象的创建非常接近,他们会得到相同的种子。如果你在它们之间留下延迟(例如Thread.Sleep(2000)),你会得到不同的价值。