2017-05-26 20 views
0

假設我正在玩一張包含一系列疊卡的紙牌遊戲。我不知道遊戲開始前會有多少張牌,但是一旦這樣做,堆疊的牌的數量將保持不變。然後,我的第一個想法是使用我爲遊戲實例獲得的堆棧數量創建一個數組,然後將這些堆棧中的每個頂層卡片放入數組中,然後使用鏈接列表將每張卡片鏈接到它們的堆棧。在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,這通常是不好的習慣。有沒有更聰明的方法來做到這一點?

+1

爲什麼你不能使用'List []'?這會忽略'Card'中'cardInFront'和'cardInBack'引用的需要。 – Turing85

+0

即使你不知道有多少堆棧需要作爲List支持add,remove等等,你也可以使用通用列表,並且你不需要傳遞大小給實現構造函數(例如'ArrayList' )預先 – niceman

+0

反正你能告訴我們'deck'變量定義以及它的類/接口定義嗎? – niceman

回答

0

據我瞭解,類似ArrayList<LinkedList<Card>>數據類型將完成這項工作。

ArrayList<LinkedList<Card>> listOfCardStack=new ArrayList<LinkedList<Card>>(); 

LinkedList<Card> stack0 = new LinkedList<Card>(); 

Card card0=new Card... 

stack0.add(card0); 

stack0.add(card1); 

... 

listOfCardStack.add(stack0); 

... 
+0

如何將能夠說出每個堆棧如果我不知道有多少棧會得到每場比賽? –

+1

你不必知道堆棧,你會得到的數量。你正在使用LinkedList類,它實現了java.util.List。當你得到一個新的堆棧,創建一個LinkedList像上面,填充它,並加入到listOfCardStack。 –

+0

感謝您的幫助,我得到它吧! –