0

コード

Random Randomizer = new Random () ;
  cardoneA = suits[Randomizer.nextInt(suits.length)];
  cardoneAv = ranks[Randomizer.nextInt(ranks.length)];

ランダマイザーが同じカードを2回選ぶのを防ぐにはどうすればよいですか?例えば。特定のスーツとランクを選択した場合、どうすればそれが再び選択されないようにすることができますか?また、クラスが異なる限り、同じ値の別のカードを選択できるように、これら2つを一緒に選択するにはどうすればよいですか?

4

4 に答える 4

5

実生活で行うように、トランプのデッキをシミュレートするだけです。

  1. まだ描画されていないすべてのカードをArrayListに保存します。
  2. 0からArrayListの現在のサイズまでの乱数を生成します
  3. 選んだカードを外します。アレイのサイズが1つ小さくなりました。

このアルゴリズムは、 Fisher-YatesShuffleとしても知られています。

于 2012-09-19T01:33:59.320 に答える
2

ランダマイザーが同じインデックスを複数回返すのを防ぐことはできません。どのカード(スーツインデックスとランクインデックスの組み合わせ)のリストを保持し、ループ内で新しいランダムインデックスを選択し、まだ選択していないカードを取得するまでループする必要があります。

于 2012-09-19T01:30:33.757 に答える
2

選択したカードを追跡するのではなく、選択していないカードを追跡し、番号をランダム化して、選択していないカードの中から選択します。

  1. 可能なすべての組み合わせでリストを初期化します
  2. 0から(選択されていないカードの数-1)までの乱数を生成します
  3. カードを選び、リストからカードを削除します
  4. 必要な数のカードが揃うまで、またはすべてのカードが選択されるまで、手順2と3を繰り返します。
于 2012-09-19T01:33:30.710 に答える
1

それらをシャッフルしようとしていますか?

list.add(list.remove(n));その場合、nが0から。までの乱数である1行のステートメントlist.size() - 1。きちんとしたシャッフルのためにこれを約500回繰り返します。これは一般的なシャッフルです。ランダムなカードを取り出し、上に置きます。

于 2012-09-19T01:43:41.773 に答える