4

重複の可能性:
ランダムな文字列生成 - 次々に生成された 2 つが同じ結果をもたらす

私は、同時に 2 つのサイコロを転がす 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オブジェクトを使用してすべての乱数を生成することで回避できます。

それがまさにあなたがすべきことです。ランダムのインスタンスを1つ作成し、それを使用してすべての乱数を生成します。

于 2011-03-19T02:12:07.423 に答える
4

1つのランダムオブジェクトを保持して再利用する必要があります。新しいランダムオブジェクトを作成するたびに、同じ場所から始まるように数字のシーケンスを効果的にリセットします。Randomオブジェクトをメンバー変数としてどこかに格納します。また、プログラムを実行するたびに異なる値(たとえば、システム時刻に基づく値)をシードすることもできます。

于 2011-03-19T02:10:08.937 に答える
4

1つのアプリケーションに2つ以上のランダムなオブジェクトを割り当てると、私が見た「乱数」ツールの大部分はひどく失敗します。Random呼び出しごとに新しいオブジェクトを割り当てます。そのたびに、かなり弱いもの、場合によっては同じシードがシードされます。

したがって、単一の Randomオブジェクトを生成し、アプリケーションの存続期間にわたってそれを使用します。

于 2011-03-19T02:11:19.443 に答える