我正在使用Scanner
来获取用户的输入,但我想检查它是否是整数。所以,我找到了this。问题是,我不明白为什么在此解决方案中done = true
位于try
部分。
boolean done = false;
while (!done) {
try {
...
done = true;
} catch (...) {
}
}
如果我要在try
中输入我的内容,请执行以下操作:
try {
input = sc.nextInt();
done = true;
}
如果输入不是int
并进入catch
部分,为什么如果boolean
已经更改,它会重新执行循环,即使它已经在那里在它之后不是break
或continue
?
另外,我会在this case中使用throw new
,但我还没有正式向我解释,所以我不允许使用它。
另一件事,是否只能使用this case中的do-while
来完成?
在最后一个链接中,为什么在scanner.next();
而不是catch
中说input = scanner.nextInt();
?或者是一样的吗?
答案 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则继续进行;