删除一个列表中的所有元素并添加到另一个列表 - Java

问题描述 投票:0回答:2

所以我试图从玩家的'Rack'(一个ArrayList)中删除所有牌,并将其逐个放入丢弃堆(Stack)中。到目前为止,我有以下代码,我已经意识到一旦它达到5就会停止。(注意:每个玩家机架有10张卡)。

        int rackSize = player.getPlayerRack().getRack().size(); // rackSize = 10
        for (int i = 0; i < rackSize; i++) {
            getDeck().getDiscardPile().add(player.getPlayerRack().getRack().remove(i));
        }

我的问题是如何删除玩家'Rack'中的所有项目,使rackSize = 0,并将所有项目添加到弃牌堆中?

如果这令人困惑,非常抱歉。你可以通过说ArrayList<Integer> hand中有10个整数来概括它,所以:[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]。如何从此列表中删除所有项目并将其添加到Stack<Integer> discardPile

java arraylist stack
2个回答
5
投票

发生的事情是当你从Rack中移除元素时,你仍然在用i++递增,这意味着旧索引i的新值仍然落后。您要做的是将代码更改为:

int rackSize = player.getPlayerRack().getRack().size(); // rackSize = 10
for (int i = 0; i < rackSize; i++) {
    getDeck().getDiscardPile().add(player.getPlayerRack().getRack().remove(0));
}

这样,你总是到达Rack中的第一个新元素,直到它为空,假设在执行此代码时没有重新填充Rack


0
投票

使用0而不是i来访问ArrayList。

当你删除一个元素时,它不再在ArrayList中,所以你必须保持这一点 - 通过数组索引的进一步引用应该在每次迭代中递减1。因此,您可能希望每次都能访问第一个项目。

© www.soinside.com 2019 - 2024. All rights reserved.