Java 何时在列表中使用set和add方法

Java 何时在列表中使用set和add方法,java,Java,cutDeck()。这将移动卡的第一个cutLocation数量(“first”表示最低索引),并将其添加到列表的后面。确保您添加的卡的顺序与最初存储的顺序相同(相对) public List<PlayingCard> cutDeck(int cutLocation) { for (int i = 0; i < cutLocation; i++) { cards.add(cards.get(i)); } for (int i = 0; i

cutDeck()。这将移动卡的第一个
cutLocation
数量(“first”表示最低索引),并将其添加到列表的后面。确保您添加的卡的顺序与最初存储的顺序相同(相对)

public List<PlayingCard> cutDeck(int cutLocation) {
    for (int i = 0; i < cutLocation; i++) {
        cards.add(cards.get(i));
    }
    for (int i = 0; i < cutLocation; i++) {
        cards.remove(cards.get(i));
    }
    return cards;
}
public List cutDeck(int cutLocation){
对于(int i=0;i
这是我收到的错误消息

当卡片有208张卡片时,cutDeck(133)未正确剪切。在指数0时,预期为5H,但预期为3C:但:


我看不出我做错了什么,这是我的逻辑吗?我应该使用
卡。set()
而不是
卡。add()

当你为
循环移除第二个
中的第一张卡时,你的所有卡都将被移到前面一个位置。但是循环变量
i
仍在增加,您可以在
卡中使用它。获取(i)
调用。这意味着当您在循环的第二次迭代中时,您将调用
卡。get(1)
,但这将是要删除的原始第三张卡。之后,您尝试用
卡删除下一张卡。获取(2)
,但它会删除原来的第五张卡,依此类推


您可能需要使用
卡。removeAt(0)
以(始终)在开始时移除卡,直到达到限制
剪切位置

您的移除是错误的。想象一下,
卡片
中有五张卡片,我们在前两张卡片之后将其拆分

1 2 3 4 5
第一个循环终止后,您将获得:

1 2 3 4 5 1 2
现在,第二个循环开始并移除
i=0
处的第一张卡,即
1

2 3 4 5 1 2
现在,您的第二个循环将删除
i=1
处的第一张卡,即
3
,而不是
2

这就是你的错误所在。您可以将整个逻辑简化为单个for循环:

for(int i = 0; i < cutLocation; i++) {
    cards.add(cards.remove(0));
}
for(int i=0;i