2017-10-10 96 views
0

所以我試圖在一個名爲Table的類中使用一個包含卡對象(在一個單獨的類中定義)中的堆棧的ArrayList創建「堆」卡。如何訪問ArrayList中的堆棧或鏈接列表?

我初始化它像這樣:

private MyArrayList<MyStack<Card>> piles;  

public Table() 
{ 
    MyStack<Card> piles = new MyStack<>(); 
} 

我的問題是,我無法弄清楚如何添加東西,並從裏面ArrayList中的堆棧。我的初始化是錯誤的嗎?如果是這樣,我該如何解決它?

注意:MyArrayList和MyStack本質上與ArrayList和Stack的版本略有不同。

+0

我提出的「重複」問題談論「列表清單」。但從本質上講,如果您談論列表,堆棧列表或任何集合列表,則無關緊要。 – GhostCat

回答

0

變量名稱有點混亂。試想一下:

// private MyArrayList<MyStack<Card>> piles; 
private final ArrayList<Stack<Card>> allPiles; 

public Table() { 
    // MyStack<Card> piles = new MyStack<>(); 
    allPiles = new ArrayList<>(); 
} 

那麼你可以做這樣的事情:

public void addCardToPile(Card card, int pileIndex) { 
    while (allPiles.size() < pileIndex) { 
     allPiles.add(new Stack<Card>()); 
    } 

    allPiles.get(pileIndex).push(card); 
} 


public Card getTopCardFromPile(int pileIndex) { 
    while (allPiles.size() < pileIndex) { 
     allPiles.add(new Stack<Card>()); 
    } 

    if (allPiles.get(pileIndex).isEmpty()) { 
     return null; 
    } 

    return allPiles.get(pileIndex).pop(); 
} 

但如果ArrayList是最合適的位置目前還不清楚。考慮一個Map<Integer, Stack<Card>> allPiles,而不是pileIndex有像pileNumber。或Map<String, Stack<Card>> allPilespileName

+0

不幸的是,改變列出的變量名稱是一個不行,因爲它是一個類的項目分配,正如添加方法等(是的,編碼類不會讓你嘗試不同的事情),但我會嘗試你說了什麼,看看我的程序是否可以工作。 –

+0

然後告訴你的老師他正在教你*垃圾*。有一個局部變量*樁*陰影場*樁* ...,甚至使用不同類型絕對沒有意義。名字很重要。他們的意思是。如果你的教練真的堅持這樣的細節...... woha。 – GhostCat

+0

那麼,你的解決方案確實幫助我!我終於可以使卡片遊戲的工作,所以謝謝。 –

0

在這裏遍歷列表樁,堆棧中推卡。

for (MyStack cards: piles) { 
    cards.push(new Card); 
}