【问题标题】:Why is the boolean in the "try" part of a "Try/Catch" method?为什么“尝试/捕获”方法的“尝试”部分中的布尔值?
【发布时间】:2017-05-20 17:24:04
【问题描述】:

我正在使用Scanner 来获取用户的输入,但我想检查它是否为整数。所以,我找到了this。问题是,我不明白为什么在这个解决方案中done = truetry 部分。

boolean done = false;
while (!done) {
    try {
        ...
        done = true;
    } catch (...) {
    }
}

如果我要在try 中输入我的信息,就像这样:

try {
  input = sc.nextInt();
  done = true;
}

如果输入不是int 并进入catch 部分,如果boolean 已经更改,为什么它会重新执行循环,即使它没有@987654333 @ 或 continue 紧随其后?

另外,我会使用throw new,就像this case 一样,但还没有正式向我解释,所以我不能使用它。

另一件事,只能用do-whilethis case 那样完成吗? 在最后一个链接中,为什么它在catch 中说scanner.next(); 而不是input = scanner.nextInt();?还是一样?

【问题讨论】:

  • 请编辑问题以将其限制为具有足够详细信息的特定问题,以确定适当的答案。 避免同时提出多个不同的问题。

标签: java boolean try-catch


【解决方案1】:

如果输入不是 int 并进入 catch 部分,

如果用户输入的输入不是int 它将进入捕获部分并且它将设置done = true;(因为它已经进入了try中的以下语句 - 在Exception之后不要执行)。

【讨论】:

  • 谢谢你,也好心,伙计。 :3
【解决方案2】:

如果input = sc.nextInt(); 抛出不是 int 的异常,它会立即跳转到 catch。这意味着done = true; 行没有运行。只有在用户输入有效的 int 时才会退出循环。

【讨论】:

    【解决方案3】:

    简单:外部循环将重复要求用户输入直到done 变量表示:“现在我们收到了正确的输入”。

    换句话说:catch 在输入不符合预期时是必需的;但是当到达那条线done=true 时——一切都很好;并且循环可以“结束”。

    这就是全部。

    【讨论】:

    • 非常感谢。 :3
    • 不客气。感谢您的快速投票。我很欣赏那些迅速向所有给出合理答案的人展示他们的反馈的新手。这是我尝试跟随自己的可能性。
    【解决方案4】:

    我建议不要使用while 编写复杂的逻辑,而是使用Scanner 类的hasNextInt() 方法,here's javadoc:

    如果此扫描器输入中的下一个标记可以是,则返回 true 使用 nextInt() 解释为默认基数中的 int 值 方法。

    所以,你可以在if里面调用这个方法,如果它返回true则继续;

    【讨论】:

    • 好吧,我们还没有看到那个,所以我不会被允许使用它。此外,我以前从未使用过它,而且我对while 的了解比对hasNextInt() 的了解更多,但仍然感谢您的帮助。赞成票。 :3
    猜你喜欢
    • 2019-04-14
    • 1970-01-01
    • 1970-01-01
    • 2020-07-31
    • 2012-05-24
    • 1970-01-01
    • 1970-01-01
    • 2016-05-11
    • 1970-01-01
    相关资源
    最近更新 更多