【问题标题】:How to delete certain cards that has been used from player hand in Java? [duplicate]如何在Java中删除某些已从玩家手中使用过的卡片? [复制]
【发布时间】:2020-10-25 21:40:31
【问题描述】:

我正在用 Java 编写游戏。我正在使用 Java ArrayList 来存储卡片。但是对卡片进行忽略大小写字符串检查,问题是它正在删除名称为“Trooper”的卡片,但它总是在玩家手中留下一张士兵卡片。我想让它留下所有的士兵卡。

Java 控制台中的卡片显示:Trooper Agent Agent Agent Trooper Trooper 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();
    }
}
           

【问题讨论】:

  • 是时候启动您最喜欢的 IDE 调试器了,使用它来单步调试代码,在单步执行时检查关键变量,并找出问题发生的原因。
  • @Progman 非常感谢该链接。修复它并立即了解原因!

标签: java


【解决方案1】:

问题在于您从列表中删除士兵的方式。通过在数组中向上计数并从列表中删除,使playerDisplayDeck 的大小更小,但j 保持不变。要解决此问题,您应该使用 playerDisplayDeck.size() -1 启动 for loop 并减少它,以 0 启动循环并增加它。

像这样:

for(int j = playerDisplayDeck.size() -1 ; j >= 0;j--) {
    if(playerDisplayDeck.get(j).getName().equalsIgnoreCase("trooper")) {
        playerDisplayDeck.remove(j);
    }
}

【讨论】:

    猜你喜欢
    • 2013-03-14
    • 1970-01-01
    • 2013-02-25
    • 1970-01-01
    • 1970-01-01
    • 2021-04-09
    • 2021-12-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多