【问题标题】:How can I access a stack or linked list that's inside an ArrayList? [duplicate]如何访问 ArrayList 中的堆栈或链表? [复制]
【发布时间】:2018-03-21 23:24:00
【问题描述】:

所以我试图在一个名为 Table 的类中使用 ArrayList 创建卡片的“堆”,其中的堆栈包含卡片对象(在单独的类中定义)。

我是这样初始化的:

private MyArrayList<MyStack<Card>> piles;    

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

我的问题是我不知道如何在 ArrayList 内的堆栈中添加内容。我的初始化错了吗?如果是这样,我该如何解决?

注意:MyArrayList 和 MyStack 本质上只是 ArrayList 和 Stack 的稍微不同的版本。

【问题讨论】:

  • 我提出的“重复”问题是关于“列表列表”的。但本质上,你谈论列表列表、堆栈列表或任何集合列表都没有关系。

标签: java arraylist stack


【解决方案1】:

变量名称有点混乱。考虑:

// 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&lt;Integer, Stack&lt;Card&gt;&gt; allPiles,而不是pileIndex 有类似pileNumber 的东西。或者Map&lt;String, Stack&lt;Card&gt;&gt; allPilespileName

【讨论】:

  • 不幸的是,更改列出的变量名是不可以的,因为它是一个类项目分配,添加方法等也是如此(是的,一个不允许你尝试不同事物的编码类),但我会试试你所说的,看看我的程序是否能正常工作。
  • 然后告诉你的导师他在教你垃圾。让局部变量 piles 遮蔽字段 piles ... 甚至使用不同的类型是绝对没有意义的。名字很重要。它们意味着什么。如果你的导师真的坚持这样的细节......哇。
  • 好吧,您的解决方案确实帮助了我!我终于可以让纸牌游戏正常运行了,谢谢。
【解决方案2】:

遍历这里堆的列表,将卡片推入堆栈。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-25
    • 2016-09-08
    • 2011-09-23
    • 2020-03-20
    • 2022-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多