我正在学习java并且目前我坚持一个练习,其中我无法理解为什么代码以这种方式表现。我在纸上追踪我的步骤,但我希望答案不同于程序实际上做的。如果有人能解释为什么它做它做的事情
CODE:
System.out.print("Enter an integer: ");
int numb = in.nextInt();
while (in.hasNextInt())
{
System.out.println(numb);
System.out.print("Enter an integer: ");
numb = in.nextInt();
}
TESTER只输入数字,因此输出应如下所示:
Enter an integer: 5
- 5
- Enter an integer: 10
- 10
- Enter an integer: 8
- 8
- Enter an integer: k
...
但它看起来像这样:
Enter an integer: 5
- 10
- 5
- Enter an integer: -4
- 10
- Enter an integer: 8
- -4
- Enter an integer: -6
- 8
- Enter an integer: 11
- -6
- Enter an integer: -1
答案 0 :(得分:6)
这是因为你过早地使用in.hasNextInt()
(或者太晚,取决于你如何看待它):Scanner
无法告诉你它是否看到整数,直到之后最终用户输入了一个值。
如果您提示输入一个号码,然后检查hasNextInt
,则您的代码不应跳过第二个提示:
System.out.print("Enter an integer: ");
while (in.hasNextInt()) {
int numb = in.nextInt();
System.out.println(numb);
System.out.print("Enter an integer: ");
}
这也可以防止在第一个条目不是数字的情况下发生异常。