2017-10-10 95 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); 
}