【问题标题】:Stop try block automatically iterating to the next loop (for loop java)停止 try 块自动迭代到下一个循环(for loop java)
【发布时间】: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 &lt; 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


【解决方案1】:

我假设另一个类中用于模拟掷骰子的方法正在抛出 IllegalArgumentException。由于您在 catch 块中处理它,因此 for 循环不会终止,它会打印错误并继续进行下一次迭代。

【讨论】:

    猜你喜欢
    • 2013-03-18
    • 2022-08-18
    • 2012-03-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-28
    相关资源
    最近更新 更多