【问题标题】:The second while loop is running endlessly can someone please explain why?第二个while循环无休止地运行有人可以解释为什么吗?
【发布时间】: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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2022-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-14
    • 2015-10-16
    相关资源
    最近更新 更多