如何在Java中删除玩家手上使用过的某些卡?
我正在用Java编程这个游戏。我正在使用Java ArrayList存储卡。但在牌上做一个忽略大小写字符串检查,问题是它删除了名为“Trooper”的牌,但它总是在玩家手中留下一张Trooper牌。我想让它留下所有的骑警卡 Java控制台中的卡显示:士兵代理士兵代理士兵 Jave代码:如何在Java中删除玩家手上使用过的某些卡?,java,Java,我正在用Java编程这个游戏。我正在使用Java ArrayList存储卡。但在牌上做一个忽略大小写字符串检查,问题是它删除了名为“Trooper”的牌,但它总是在玩家手中留下一张Trooper牌。我想让它留下所有的骑警卡 Java控制台中的卡显示:士兵代理士兵代理士兵 Jave代码: if(mouseCursor.getRectangle().intersects(placeList.get(i).getRectangle()) && mouseCursor.isPressed
if(mouseCursor.getRectangle().intersects(placeList.get(i).getRectangle()) && mouseCursor.isPressed() ) {
if(attackPower >= placeList.get(i).getAttackPower()) {
for(int j = 0 ; j < playerDisplayDeck.size();j++) {
System.out.println(playerDisplayDeck.get(j).getName());
}
for(int j = 0 ; j < playerDisplayDeck.size();j++) {
if(playerDisplayDeck.get(j).getName().equalsIgnoreCase("trooper")) {
playerDisplayDeck.remove(j);
}
}
for(int j = 0 ; j < playerDisplayDeck.size();j++) {
System.out.println(playerDisplayDeck.size());
}
attackPower = attackPower - placeList.get(i).getAttackPower();
}
}
if(mouseCursor.getRectangle().intersects(placeList.get(i).getRectangle())&&mouseCursor.isPressed()){
if(attackPower>=placeList.get(i).getAttackPower()){
对于(int j=0;j
问题在于你将士兵从名单中删除的方式。通过在数组中计数并从列表中删除,可以使playerDisplayDeck
的大小变小,但j
保持不变。要解决此问题,应使用playerDisplayDeck.size()-1启动for循环
,并将其递减,而不是使用0启动循环并将其递增
像这样:
for(int j = playerDisplayDeck.size() -1 ; j >= 0;j--) {
if(playerDisplayDeck.get(j).getName().equalsIgnoreCase("trooper")) {
playerDisplayDeck.remove(j);
}
}
是时候启动你最喜欢的IDE调试器了,用它一步一步地检查你的代码,一步一步地检查关键变量,并找出问题发生的原因。看这里,也许-@Progman非常感谢这个链接。修好了,现在明白为什么了!