【发布时间】:2021-12-10 18:55:24
【问题描述】:
问候查看此问题的堆栈溢出者,我是一名业余爱好者,正在使用 Java 开发划船游戏,目前面临一个问题,即即使输入无效,for 循环中的 try 块也会立即迭代到下一个循环。 for 循环由一个用于启动掷骰子的输入组成,掷骰子函数位于一个单独的类中,当输入不是“Y”时它将引发异常。 try 块在不在 for 循环中时可以完美运行,但是当它放在 for 循环中时,即使输入无效,它也会自动迭代循环。
for (int i = 0; i < boats.length; i++) {
try {
System.out.printf("BOAT %d TURN %n", i + 1);
System.out.println("Type Y to throw your dice!");
String diceThrow = input.nextLine();
boats[i].setPosition(newRiver.Flow(boats[i].getPosition(), newDice.diceThrow(diceThrow)));
System.out.println("boat position is at " + boats[i].getPosition());
} catch (IllegalArgumentException e) {
System.out.println(e.getMessage());
}
}
【问题讨论】:
-
try 块不迭代,它是迭代的循环。为什么它会停止迭代?如果您希望它在到达 catch 块时停止,只需添加一个中断;在那里。
-
您可能不想在这里使用 for 循环,而是使用类似
while(numBoatsEntered < maxBoats) { try { /*enter boat*/ numBoatsEntered++} catch(/*relevant exceptions*/) { /*print message and ignore input*/ }}的东西。正如 Stultuske 所说,迭代的是循环,而不是 try-catch。作为开发人员,您需要确保正确维护循环的条件(即决定何时以及如何更改条件中使用的变量 - 您还需要了解循环如何为此工作)以及何时使用break;尽早退出循环。 -
@Stultuske 和 Thomas(不知道为什么我只能标记一个用户),非常感谢您的回复!正是我对 try catch 块缺乏了解,而且我运行了另一个 while 循环,这使我无法检测到这个愚蠢的错误。我明白我现在搞砸了。
标签: java for-loop function-try-block