java - 何时在列表中使用 set 和 add 方法
问题描述
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()
吗?
解决方案
你的删除是错误的。想象一下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));
}
推荐阅读
- json - 获取 Observable 的值
进入打字稿中的数组 - vb.net - 如何通过 vb.net 使用命令提示符来使用 BCDEDIT
- go - 如何在 OSX 上获取 os 环境变量?
- azure - Azure 搜索匹配同一对象的两个属性
- java - 当用户没有输入“是”或“否”时,我需要帮助让该程序打印“无效响应”,我该如何简单地做到这一点?
- windows - 在nasm中编译后无法运行exe文件
- python - 通过搜索子字符串创建包含布尔输出的新熊猫数据框列
- php - 如何将 PHP 变量中数字的百分比调用为 HTML/CSS?
- r - 使用 case_when 对数据表进行子集化
- swift - 创建一个函数以将 uiimageview 嵌套在 uiview 上