所以,我有一个方法,它是一个基本的战斗引擎。创建两个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
2条答案
按热度按时间hof1towb1#
问题出在你身上
while
循环,尝试使用while ((baddies.size() > 0) && (goodies.size() > 0))
. 现在你的while
循环运行的时间与第一个条件相同baddies.size() > 0
是真的,如果是真的,那么它不会检查goodies.size() > 0
或者不是。如果你使用&&
,一旦其中一个列表为空,则条件为while
将为false,循环将停止。txu3uszq2#
正如编译器警告所说,if语句只能为true。这是因为while循环只会退出一次
baddies.size()
变为零,因此当它到达if语句时baddies.size() == 0
永远都是真的。我怀疑这是一个逻辑问题,实际上您希望while循环在以下任一情况下结束一次
baddies.size()
或goodies.size()
变为零(而您现在使用的方式将一直等到它们都为零)。有while (baddies.size() != 0 && goodies.size() != 0)
这将解决这个问题。