0

ひどい文法とつづりでごめんなさいと言うことから始めましょう。

デッキを作成して52枚のカードを追加するMVC3プロジェクトがあります。次に、シャッフルメソッドでループをステップスルーしたときにのみ機能するシャッフル機能を追加しました。

私のクラスのデッキでは、52個のPlayingCardオブジェクトを保持する配列を作成します。Deckには、ビューに表示されているリストに配列をコピーするメソッドがあり、リストをシャッフルするメソッドもあります。

説明するのは簡単ではありませんが、コードをステップスルーしない限り、コードは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;
    }   
}

ステップスルーなしで、シャッフル後に出力します。

*4ダイヤモンド 1ハート2ハート3ハート4ハート5ハート6ハート7ハート8ハート9ハート10ハート11ハート12ハート13ハート1スペード2スペード3スペード4スペード5スペード6スペード7スペード8スペード9スペード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スペード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スペード2ハート6スペード13スペード4スペード2スペード6ダイヤモンド4ハート2ダイヤモンド4ダイヤモンド11クラブ7ハート11ハート3スペード3ハート10クラブ13ハート9ハート13ダイヤモンド

示されているように、ループは私がそれをステップスルーしたときにのみ実行されます。私はさまざまなループを試し、新しいプロジェクトを作成し、シャッフル機能をコントローラーに移動しましたが、何も役に立ちません。

誰かが私がこれをどのように解決すべきか考えていますか?

4

1 に答える 1

1

これを中心にサンプルアプリを作成しましたRandom rnd = new Random()。ループの外側に移動すると、期待どおりの動作が得られます。

私の意見では、1枚のカードしかシャッフルしていないように見えたのは、ランダムに生成された値がループ全体で同じ値だったためです。

于 2012-10-03T16:07:43.483 に答える