为什么“Try / Catch”方法的“try”部分中的布尔值?

时间:2017-05-20 17:24:05

标签: java boolean try-catch

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

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

如果我要在try中输入我的内容,请执行以下操作:

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

如果输入不是int并进入catch部分,为什么如果boolean已经更改,它会重新执行循环,即使它已经在那里在它之后不是breakcontinue

另外,我会在this case中使用throw new,但我还没有正式向我解释,所以我不允许使用它。

另一件事,是否只能使用this case中的do-while来完成? 在最后一个链接中,为什么在scanner.next();而不是catch中说input = scanner.nextInt();?或者是一样的吗?

4 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:3)

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

如果用户输入的输入不是int ,则,然后进入捕获部分 ,它将设置done = true;(因为try 执行后Exception 已经进入了import quandl import datetime as dt quandl.ApiConfig.api_key = '<API_KEY>' today=dt.date.today() thirty_days=dt.timedelta(days=30) thirty_days_ago=today-thirty_days my_list=[] data = quandl.get("WIKI/AAPL", start_date=str(thirty_days_ago), end_date=str(today),column_index=4) print '=================================================' my_list.append(data) print my_list 中的以下语句。

答案 2 :(得分:2)

简单:外部循环将重复询问用户输入,直到 done变量指示:“现在我们已收到正确的输入”。

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

这就是全部。

答案 3 :(得分:1)

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

  

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

因此,您可以在if内调用此方法,如果返回true则继续进行;