如何在Java中删除玩家手上使用过的某些卡?

如何在Java中删除玩家手上使用过的某些卡?,java,Java,我正在用Java编程这个游戏。我正在使用Java ArrayList存储卡。但在牌上做一个忽略大小写字符串检查,问题是它删除了名为“Trooper”的牌,但它总是在玩家手中留下一张Trooper牌。我想让它留下所有的骑警卡 Java控制台中的卡显示:士兵代理士兵代理士兵 Jave代码: if(mouseCursor.getRectangle().intersects(placeList.get(i).getRectangle()) && mouseCursor.isPressed

我正在用Java编程这个游戏。我正在使用Java ArrayList存储卡。但在牌上做一个忽略大小写字符串检查,问题是它删除了名为“Trooper”的牌,但它总是在玩家手中留下一张Trooper牌。我想让它留下所有的骑警卡

Java控制台中的卡显示:士兵代理士兵代理士兵 Jave代码:

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非常感谢这个链接。修好了,现在明白为什么了!