首页 > 解决方案 > 第二个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>

这就是正在发生的事情,而且还在继续。它是一个无限循环。

第一行是测试用例的数量,所以第二个循环应该在这个给定的情况下运行两次,但是它会无休止地运行

标签: javaiojava.util.scanner

解决方案


我真的不明白你在这里用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


推荐阅读