Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/379.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 简单的while循环练习_Java_Loops - Fatal编程技术网

Java 简单的while循环练习

Java 简单的while循环练习,java,loops,Java,Loops,我正在学习java,目前我正在做一个练习,我无法理解为什么代码会以这种方式运行。我在纸上追踪我的步骤,但我希望得到和程序实际不同的答案。如果有人能解释为什么它会这样做 代码: 测试仪只是输入数字,所以输出应如下所示: Enter an integer: 5 - 5 - Enter an integer: 10 - 10 - Enter an integer: 8 - 8 - Enter an integer: k ... Enter an integer: 5 - 10 -

我正在学习java,目前我正在做一个练习,我无法理解为什么代码会以这种方式运行。我在纸上追踪我的步骤,但我希望得到和程序实际不同的答案。如果有人能解释为什么它会这样做

代码:

测试仪只是输入数字,所以输出应如下所示:

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 
但看起来是这样的:

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 

这是因为您在.hasNextInt()中使用
太快(或太晚,取决于您如何看待它):直到最终用户输入值后,
扫描仪才能告诉您是否看到整数

如果提示输入一个数字,然后检查
hasnetint
,则代码不应跳过第二个提示:

System.out.print("Enter an integer: ");
while (in.hasNextInt()) {
    int numb = in.nextInt();    
    System.out.println(numb);
    System.out.print("Enter an integer: ");
}

这还可以防止在第一个条目不是数字的情况下出现异常。

基本上,
hasNextInt
会向前看,看下一个
nextInt
是否可能;它不会回头看前一个
nextInt
是否有效。谢谢你花时间回答我,但不知怎么的,我仍然没有完全理解它,也许我看错了。扫描仪的输入是否在int numb=in.nextInt()行中“扫描”?如果是这样,那么如何测量第一个循环条件,如果此时扫描仪尚未扫描用户输入,并且不知道它是否为int。@user3338991是否尝试运行此代码?你得到了什么结果?我得到了正确的结果,谢谢你,但是当我试图学习java时,我试图理解为什么,这让我暂时无法理解。例如,如果我输入字母而不是int,为什么这个代码不打印它,scann和print在循环中,它们之间没有条件。也许我不理解java执行的顺序?请你把那个密码一步一步地说出来好吗?感谢you@user3338991虽然
nextInt
和打印之间没有条件,但扫描仪已经知道
nextInt
会成功,因为它知道循环条件成立。当你调用
hasnetint
并得到
true
时,扫描仪已经有了
int
,它只是没有给你,因为你没有问。
循环中的条件虽然
循环是真实条件,但在第一次输入之前会对其进行检查,并且每次控件返回到循环顶部时都会对其进行检查。所以你可以用纸和笔来回溯,提示,检查,扫描,打印,提示,检查,扫描,打印,提示,等等。