在java中,arraylist始终以.size()0的形式读取while循环,即使它是在创建时实现的

cld4siwp  于 2021-08-20  发布在  Java
关注(0)|答案(2)|浏览(344)

所以,我有一个方法,它是一个基本的战斗引擎。创建两个ArrayList,一个用于好人,另一个来自另一种方法,该方法提供随机数量的怪物对象供他们战斗。monster arraylist是使用另一个方法getrandommonster()返回的arraylist实现的。我已经检查过了,然后再次检查过了,并且交互正在按预期进行。列表中始终至少有一个怪物对象。这可以通过打印list.size()进行验证。但是,该方法中的所有if和while检查都像list.size()返回0。没有夸张之处-在list.size()返回2的同一次运行中,while循环的行为就好像它是0。我被难住了。

public void runCombat() {
        ArrayList<Knight> goodies = data.activeKnights;
        ArrayList<MOB> baddies = data.getRandomMonsters();
        System.out.println(baddies);
        view.printBattleText(baddies, data.activeKnights);
        while ((baddies.size() > 0) || (goodies.size() > 0)) {
            goodTurn(baddies,goodies);
            badTurn(baddies,goodies);
            }
        if (baddies.size() == 0) {
            System.out.println("Huzzah, victory!");
        } else if (data.activeKnights.size() <= 0) {
            System.out.println("Thou hath been defeated. Scrub.");
        }
    }

运行显示坏人。大小()=0

警告显示baddies.size()始终为0

hof1towb

hof1towb1#

问题出在你身上 while 循环,尝试使用 while ((baddies.size() > 0) && (goodies.size() > 0)) . 现在你的 while 循环运行的时间与第一个条件相同 baddies.size() > 0 是真的,如果是真的,那么它不会检查 goodies.size() > 0 或者不是。如果你使用 && ,一旦其中一个列表为空,则条件为 while 将为false,循环将停止。

txu3uszq

txu3uszq2#

正如编译器警告所说,if语句只能为true。这是因为while循环只会退出一次 baddies.size() 变为零,因此当它到达if语句时 baddies.size() == 0 永远都是真的。
我怀疑这是一个逻辑问题,实际上您希望while循环在以下任一情况下结束一次 baddies.size()goodies.size() 变为零(而您现在使用的方式将一直等到它们都为零)。有 while (baddies.size() != 0 && goodies.size() != 0) 这将解决这个问题。

相关问题