デッキをシャッフルするためのプログラム(主に方法)を書くように求められました。私は、以下のプログラムを書いた:2つの値を交換した後のカードデッキのシャッフル、冗長性
public class Deck {
////////////////////////////////////////
// Data Members
////////////////////////////////////////
private Card[] cards; // array holding all 52 cards
private int cardsInDeck; // the current number of cards in the deck
public static final int DECK_SIZE = 52;
/**
* Shuffles the deck (i.e. randomly reorders the cards in the deck).
*/
public void shuffle() {
int newI;
Card temp;
Random randIndex = new Random();
for (int i = 0; i < cardsInDeck; i++) {
// pick a random index between 0 and cardsInDeck - 1
newI = randIndex.nextInt(cardsInDeck);
// swap cards[i] and cards[newI]
temp = cards[i];
cards[i] = cards[newI];
cards[newI] = temp;
}
}
}
をしかし、次の通りである上記のシャッフル方法で論理エラーがあります:私は、私は 2回交換するよ、カード番号42でカード番号4を交換するとします。私はこれをしない方法があるのだろうか?
私はここつのポストを確認:Shuffling a deck of cards
をしかし、それは私には意味がありませんでした。あなたはCollections.shuffleと実装を比較することができ
私が知っている限り、これは配列内の2つの要素を入れ替える方法です(少なくともJavaの場合) – MadProgrammer
@MadProgrammer:スワップを行う3行は問題ありませんが、シャッフルの一般的な方法はありません。幸いにも、それは簡単に修正されます。 –
@JonSkeet私は数分間壁に頭を向けなければならなかったが、あなたは何を意味するのかを見て、OPは各反復の "全体"リストをシャッフルしている。 。clear as mud;) – MadProgrammer