除非我打印每条线,否则读取多行输入总是会运行无限循环



我正在尝试使用Java中的扫描仪从控制台处理多行输入,除非我打印出每一行,否则它在无限循环中运行。由于某种原因,除非我打印,否则下一行不会"消耗"。我不想打印它,我只想将每行添加到以后的数组中进行处理,因此我不知道如何"消耗"每行(o)打印它。这两个循环都是无限的:

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");

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

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

edit 如果您从未看到过最后的"done",这根本不是无限环路,它是a block :您永远不会发送流到System.in。根据Windows与Unix/Linux/...键入CTRL/D或CTRL/Z键入,然后再打印与它无关。

最新更新