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()吗?
2 回答
摇曳的蔷薇
TA贡献1793条经验 获得超6个赞
你的删除是错误的。想象一下,里面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)); }
人到中年有点甜
TA贡献1895条经验 获得超7个赞
当您在第二个for
循环中取出第一张卡片时,所有卡片都将移到前面一个位置。但是您的循环变量i
仍在增加,您可以在cards.get(i)
调用中使用它。这意味着当您处于循环的第二次迭代时,您将调用cards.get(1)
,但这将是要移除的原始第三张卡片。之后,您尝试使用 删除下一张卡片cards.get(2)
,但它会删除原来的第五张卡片,依此类推。
您可能希望使用cards.removeAt(0)
to(总是)在开始时取出卡,直到达到 limit cutLocation
。
添加回答
举报
0/150
提交
取消