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