java - 第二个while循环无休止地运行有人可以解释为什么吗?
问题描述
我试图掌握多个输入,但我遇到了一个我似乎无法理解的问题。
我已经尝试过调试,并且我已经了解发生逻辑错误的位置,但我似乎无法理解原因。
import java.util.Scanner;
public class Main
{
public static void main(String args[])
{
int i=0;
Scanner sc=new Scanner(System.in);
int T=sc.nextInt();
sc.nextLine();
while(T!=0)
{
System.out.println("First Loop");
while(sc.hasNext()) {
System.out.println("Second loop");
int j=sc.nextInt();
i=i+j;
}
sc.nextLine();
T=T-1;
}
System.out.println("end");
}
}
2<br>
First Loop<br>
1 2 3 4 5<br>
Second loop<br>
Second loop<br>
Second loop<br>
Second loop<br>
Second loop<br>
1 2 3 4 5<br>
Second loop<br>
Second loop<br>
Second loop<br>
Second loop<br>
Second loop<br>
1 2 3 4 5<br>
Second loop<br>
Second loop<br>
Second loop<br>
Second loop<br>
Second loop<br>
这就是正在发生的事情,而且还在继续。它是一个无限循环。
第一行是测试用例的数量,所以第二个循环应该在这个给定的情况下运行两次,但是它会无休止地运行
解决方案
我真的不明白你在这里用2个while循环做什么,但你可以通过简单地解决无限循环问题
while(sc.hasNextInt()) { //change here
System.out.println("Second loop");
int j=sc.nextInt();
i=i+j;
}
基本上,hasNext()
将始终返回true
但是,hasNextInt()
仅当您给它一个整数时才返回 true。因此,您可以通过输入非整数输入来退出循环。
读取文件时,hasNext()
最终会false
在到达文件末尾时返回。但是,当您阅读键盘输入时,它显然永远不会返回false
。
推荐阅读
- ios - 对成员 'tableView(_:numberOfRowsInSection:)' 的模糊引用
- java - 谷歌地图显示徽标,但未在 Android 模拟器中显示
- jquery - 使用 JSON 的动态引导表/表单
- reactjs - 使用大理石图运行测试时不执行 ajax 请求
- python - 听写列表理解
- angular - 动态表内带有模糊事件的 Angular 6 输入
- c++ - 如何在 C++ 17 中移动字符串的字母?
- java - 在 Google Play 结算购买验证的 OAuth2 授权代码发布请求上获得无效授权
- google-cloud-platform - Google Cloud Platform Windows 虚拟机问题
- reactjs - 无法解析模块。Haste 模块地图中不存在模块“screens/Screen”