假設我正在玩一張包含一系列疊卡的紙牌遊戲。我不知道遊戲開始前會有多少張牌,但是一旦這樣做,堆疊的牌的數量將保持不變。然後,我的第一個想法是使用我爲遊戲實例獲得的堆棧數量創建一個數組,然後將這些堆棧中的每個頂層卡片放入數組中,然後使用鏈接列表將每張卡片鏈接到它們的堆棧。在Java中創建一組堆棧卡時替代鏈接列表?
我的卡類有以下字段:
public class Card {
private String suit;
private String value;
public Card cardInFront = null;
public Card cardInBack = null;
例如,讓我們說我給出的標準一副撲克牌(52張牌,4套,13個值)被製作成5層。我分配在循環方式的前五個卡到5個開口的陣列,像這樣:
int numOfPiles = 5;
Card[] cascadePiles = new Card[numOfPiles];
for (int i = 0; i < numOfPiles; i++) {
cascadePiles[i] = deck.get(i);
}
我再繼續處理的循環方式的卡片,但連接每個卡我處理了與兩個在它前面的卡和在它後面的卡。這一切都是用下面的代碼完成:
int x = 0;
while (x != numOfPiles) {
deck.remove(0);
x++;
}
int i = 0;
while (!deck.isEmpty()) {
if (i < numOfPiles) {
Card cardBehind = cascadePiles[i];
Card temp = cascadePiles[i];
Card nullSearcher = cascadePiles[i].cardInFront;
while (nullSearcher != null) {
cardBehind = temp;
temp = nullSearcher;
nullSearcher = temp.cardInFront;
}
addToPile(temp, deck.get(0), cardBehind);
temp.cardIsInPile = PileType.CASCADE;
deck.remove(0);
i++;
} else {
i = 0;
}
}
這個原因,我所做的這一切在鏈表是因爲我不知道有多少棧我需要每場比賽。如果我使用通用列表,我將不得不知道在遊戲開始之前要聲明多少個,我不知道。然而,通過像這樣組織堆棧,我遇到了幾個NullPointerException異常,並且我已經讀過使用null,這通常是不好的習慣。有沒有更聰明的方法來做到這一點?
爲什麼你不能使用'List []'?這會忽略'Card'中'cardInFront'和'cardInBack'引用的需要。 –
Turing85
即使你不知道有多少堆棧需要作爲List支持add,remove等等,你也可以使用通用列表,並且你不需要傳遞大小給實現構造函數(例如'ArrayList' )預先 – niceman
反正你能告訴我們'deck'變量定義以及它的類/接口定義嗎? – niceman