質問

私のひどい文法とつづりで申し訳ありませんが言うことから始めましょう。

私はデッキを作成し、それに52のカードを追加するMVC3プロジェクトを持っています。 それから私は iステップスルーシャッフル法のループの場合にのみ仕事をするシャッフル関数を追加しました。

マイクラスデッキでは、52個のトランプカードオブジェクトを保持するアレイを作成します。 デッキには、アレイをビューに表示されているリストにコピーする方法があります。 また、リストをシャッフルする方法もあります。

説明が簡単ではなく、コードは 1回のみ実行されています。

私のデッキモデルの私のシャッフル法

 public void Shuffle()
 {
    for (int i = 0; i < 51; i++)
    {
        PlayingCard temp;
        temp = myDeck[i];
        Random rnd = new Random();
        int randomNr = rnd.Next(51);
        myDeck[i] = myDeck[randomNr];
        myDeck[randomNr] = temp;
    }   
}
.

シャッフル後の出力、whitsout whitsoutスルー:

* 4ダイヤモンド 1心 2心 3心 4心 5心 6心 7心 8心 9心 10心 11心 12心 13心 1スペード 2スペード 3スペード 4スペード スペード5スペード 6スペード 7スペード 8スペード 9スペード 10スペード10 11スペード 12スペード 13スペード 1クラブ 2クラブ 3クラブ 4クラブ 5クラブ 6クラブ 7クラブ 8クラブ 9クラブ 10クラブ 11クラブ 12クラブ 13クラブ 1ダイヤモンド ダイヤモンド2 12ダイヤモンド 3ダイヤモンド 5ダイヤモンド 6ダイヤモンド ダイヤモンド7 8ダイヤモンド 9ダイヤモンド 10ダイヤモンド 11ダイヤモンド 13ダイヤモンド *

ステップから15回までの出力:

2スペード 3クラブ スペード5スペード 3ダイヤモンド 12ダイヤモンド 13心 11心 1スペード 6クラブ 5ダイヤモンド 1クラブ 12心 7クラブ 13スペード 2クラブ 10心 3スペード 4スペード 3心 6スペード 7スペード 8スペード 9スペード 10スペード10 11スペード 12スペード 8心 7心 1心 2心 4クラブ 5クラブ 9心 6心 8クラブ 9クラブ 10クラブ 11クラブ 12クラブ 13クラブ 1ダイヤモンド ダイヤモンド2 4心 4ダイヤモンド 5心 6ダイヤモンド ダイヤモンド7 8ダイヤモンド 9ダイヤモンド 10ダイヤモンド 11ダイヤモンド 13ダイヤモンド

ループ全体をスピンピングした後の出力:

10心 6クラブ 8心 5心 5クラブ ダイヤモンド7 スペード5スペード 11ダイヤモンド 12スペード 12クラブ 8ダイヤモンド 5ダイヤモンド 1クラブ 9スペード 10ダイヤモンド 12心 8スペード 9クラブ 13クラブ 6心 1スペード 11スペード 1心 12ダイヤモンド 4クラブ 3クラブ 8クラブ 9ダイヤモンド 7クラブ 2クラブ 3ダイヤモンド 1ダイヤモンド 7スペード 10スペード10 2心 6スペード 13スペード 4スペード 2スペード 6ダイヤモンド 4心 ダイヤモンド2 4ダイヤモンド 11クラブ 7心 11心 3スペード 3心 10クラブ 13心 9心 13ダイヤモンド

表示されているように、ループはそれを踏み出すときだけ実行されます。 私は異なるループを試して、新しいプロジェクトを作り、シャッフル関数をコントローラに移動することは何も役に立ちません。

誰もが私がこれを解決するべきですか?

役に立ちましたか?

解決

これを中心にサンプルアプリを作成し、Random rnd = new Random()をループの外側に移動すると思いますが予想される行動を与えます。

私の意見では、1枚のカードをシャッフルするように見えた理由は、ランダムに生成された値がループ全体に対して同じ値であるためです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top