cutDeck()
完成混洗的最后一步-剪裁甲板。这应从卡中移出前cutLocation
张牌的第一张(“最低”指的是“第一”),并将它们添加到列表的末尾。确保以与原始存储相同的顺序(相对)添加存储卡。
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;
}
这是我收到的错误消息
当卡片有208张卡片时,cutDeck(133)没有正确切割。在索引0处预期为5H,但预期为3C:<[5H]>但为:<[3C]>
我看不到我做错了什么,我应该使用cards.set()
而不是cards.add()
吗?
答案 0 :(得分:1)
您的删除错误。想象cards
里面有五张牌,我们将在前两张牌之后将其拆分。
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));
}
答案 1 :(得分:0)
当您在第二个for
循环中删除了第一张卡片时,所有卡片都将移到前面一个位置。但是循环变量i
仍在增加,您可以在cards.get(i)
调用中使用它。这意味着,当您处于循环的第二个迭代中时,将调用cards.get(1)
,但这将是要删除的原始第三张卡。之后,您尝试使用cards.get(2)
删除下一张卡,但是它将删除原始的第五张卡,依此类推。
您可能要使用cards.removeAt(0)
(总是)从一开始就取出卡,直到达到限制cutLocation
。