Java 读取多行输入总是运行一个无限循环,除非我打印每行

Java 读取多行输入总是运行一个无限循环,除非我打印每行,java,java.util.scanner,infinite-loop,Java,Java.util.scanner,Infinite Loop,我试图使用Java中的扫描器处理来自控制台的多行输入,除非我打印出每行,否则它将以无限循环运行。出于某种原因,下一行不会被“消耗”,除非我打印它。我不想打印它,我只想将每一行添加到一个数组中以供以后处理,所以我不知道如何在不打印的情况下“使用”每一行。这两个循环都是无限的: while(sc.hasNext()) { String line = sc.nextLine(); commands.add(line); //System.out.prin

我试图使用Java中的扫描器处理来自控制台的多行输入,除非我打印出每行,否则它将以无限循环运行。出于某种原因,下一行不会被“消耗”,除非我打印它。我不想打印它,我只想将每一行添加到一个数组中以供以后处理,所以我不知道如何在不打印的情况下“使用”每一行。这两个循环都是无限的:

while(sc.hasNext()) {
        String line = sc.nextLine();
        commands.add(line);
        //System.out.println(line);
        sc.nextLine();
}


while(sc.hasNext()) {
        String line = sc.nextLine();
        commands.add(line);
        //System.out.println(line);
        //sc.nextLine();
    }
编辑: 下面是我的扫描仪初始化,我还将条件编辑为hasNextLine(),仍然运行无限循环。打印“完成”的打印语句从不例外

Scanner sc = new Scanner(System.in);
    ArrayList<String> commands = new ArrayList<String>();
    while(sc.hasNextLine()) {
        String line = sc.nextLine();
        commands.add(line);
        //System.out.println(line);
        //sc.nextLine();
    }
System.out.println("done");
Scanner sc=新扫描仪(System.in);
ArrayList命令=新建ArrayList();
while(sc.hasNextLine()){
字符串行=sc.nextLine();
命令。添加(行);
//系统输出打印项次(行);
//sc.nextLine();
}
系统输出打印项次(“完成”);

您应该调用的是
hasNextLine()
,而不是
hasNext()

印刷与此无关。打印不会终止循环


编辑如果您从未看到您的最终
“完成”
,这根本不是一个无限循环,而是一个块:您从未向
系统发送流的结尾。键入Ctrl/d或Ctrl/z,具体取决于Windows与Unix/Linux/。。。再说一次,印刷与此无关

无法复制该问题。nextLine()将“使用”该行,并前进到下一行。您是否正在从
系统中读取。在
中?另外,请使用sc.hasNextLine()
!能否显示扫描仪sc的初始化?Hmmm。我以前使用过hasNextLine(),但它仍在运行无限循环。在while循环之外,当循环退出时,我放置了一个print语句来打印“done”,但是“done”永远不会打印,所以我知道循环永远不会执行。明白了。使用ctrl+z修复了此问题。有没有一种方法可以让循环在不使用流结束命令的情况下自动停止?这似乎只是一个问题的绷带。