あなたのアルゴリズムは実際にデッキをシャッフルするのではなく、そのままコピーするだけです.
public static Card[] shuffle(Card[] deck){
Card[] tempDeck = new Card[deck.length];
for (int i = 0; i < deck.length; i++) {
tempdeck[i] = deck[i];
}
Random r = new Random();
for (int i = tempDeck.length - 1; i > 0; i--){
int shuffleCard = r.nextInt(i + 1);
swap(tempDeck, i, shuffleCard);
}
return tempDeck;
}
public static void shuffle(Card[] deck, i, j) {
Card temp = deck[i];
deck[i] = deck[j];
deck[j] = temp;
}
LinkedList
デッキがすでにシャッフルされている場合、配列は最適なデータ構造ではありません (配列は同じ数の要素を持つことが保証されているためです。カードが配られた後も 52 個の要素があります。カードは を使用deck.pop()
するだけです。これは、後で 51 個の要素しか持たないためです。
public LinkedList<Card> listDeck(Card[] cards) {
return new LinkedList<Card>(Arrays.asList(cards));
}
null
配列を使用する必要がある場合は、これを行うことができます (これにより、カードが配られるにつれて、配列の末尾の要素が に変更されます。
// this modifies the original array
public static Card dealCard(Card[] deck) {
for(i = deck.length - 1; i >= 0; i--) {
if(deck[i] != null) {
Card toReturn = deck[i];
deck[i] = null;
return toReturn;
}
}
// Deck is empty!!
return null;
}