【发布时间】:2019-07-28 09:11:52
【问题描述】:
我正在尝试掌握多个输入,但我遇到了一个我似乎无法理解的问题。
我已经尝试过调试,并且我知道逻辑错误发生在哪里,但我似乎无法理解为什么。
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>
这就是正在发生的事情,而且还在继续。这是一个无限循环。
第一行是测试用例的数量,所以第二个循环在这个给定的情况下应该运行两次,但是它会无限运行
【问题讨论】:
-
为什么需要另一个
while循环?sc.hasNext()将始终返回true,因为您一直在输入。也许将其更改为sc.hasNextInt(),以便您可以通过输入非整数输入来退出循环 -
我猜你想让内循环每行运行一次。但是,
sc.hasNext()会忽略行尾,因此此循环不会在行尾终止。您的输入格式的行真的那么动态吗?还是您知道每行期望多少个值? -
第二个循环应该测试它正在使用的相同的东西,即
hasNext()和next(),或者hasNextInt()和nextInt()。不是混合物。 -
您的要求是什么?这个问题不清楚。你想如何运行代码?你的期望是什么?
标签: java io java.util.scanner