4

可能重复:
随机字符串生成 - 两个一个接一个产生相同的结果

我正在为 windows phone 7 编写一个简单的骰子游戏,其中涉及同时掷两个骰子。这是我的掷骰子代码:

 private int DiceRoll()
    {
        int result;
        Random rnd = new Random();

        result = rnd.Next(1, 7);
        return result;
    }

然后我有这个代码,当一个按钮被点击时掷骰子:

   private void roll_Click(object sender, RoutedEventArgs e)
    {
        roll1 = DiceRoll();
        roll2 = DiceRoll();}

我的问题是两个死都得到相同的结果。

知道如何获得通常会返回不同结果但偶尔返回相同结果的滚动算法吗?

4

3 回答 3

11

的默认种子Random基于当前时间。要引用文档,

因此,通过调用默认构造函数连续创建的不同 Random 对象将具有相同的默认种子值,因此将产生相同的随机数集。这个问题可以通过使用单个 Random 对象来生成所有随机数来避免。

这正是您应该做的:创建一个 Random 实例并使用它来生成所有随机数。

于 2011-03-19T02:12:07.423 回答
4

您需要保留一个 Random 对象并重复使用它;每次创建新的 Random 对象时,都会有效地将数字序列重置为从同一位置开始。将 Random 对象作为成员变量存储在某个地方。每次运行程序时,您还需要为其播种不同的值——例如,基于系统时钟时间的值。

于 2011-03-19T02:10:08.937 回答
4

如果您在单个应用程序中分配两个或更多随机对象,我见过的大多数“随机数”工具都会严重失败。您Random为每次调用分配一个新对象,并且每次它们都将被播种一些非常弱的,甚至可能是相同的种子。

因此,生成一个对象 Random并在应用程序的整个生命周期中使用它。

于 2011-03-19T02:11:19.443 回答