简单的循环练习

2 java loops

即时通讯学习java和目前我坚持一个练习,其中我无法理解为什么代码表现这种方式.我在纸上追踪我的步骤,但我希望答案不同于程序实际上做的.如果有人能解释为什么它做它做的事情

码:

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();    
   }
Run Code Online (Sandbox Code Playgroud)

TESTER只是输入数字,因此输出应如下所示:

Enter an integer: 5  
- 5 
- Enter an integer: 10 
- 10 
- Enter an integer: 8 
- 8 
- Enter an integer: k
...
Run Code Online (Sandbox Code Playgroud)

但它看起来像这样:

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 
Run Code Online (Sandbox Code Playgroud)

das*_*ght 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: ");
}
Run Code Online (Sandbox Code Playgroud)

这也可以防止在第一个条目不是数字的情况下发生异常.