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

Remove all elements in one list and add to another list - Java

所以我试图从一个玩家的 '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?

发生的事情是,当您从 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 而不是 i 来访问 ArrayList。

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