java.util.Scanner不会返回到提示

pro*_*spk 2 java java.util.scanner

import java.util.Scanner;

class newClass {
    public static void main(String args[]) {
        Scanner s = new Scanner(System.in);
        while (s.hasNext()) {
            System.out.println(s.next());
        }
        s.close();
    }
}
Run Code Online (Sandbox Code Playgroud)

该程序不会返回提示(我已通过终端运行它).这是为什么?我该如何纠正?

aio*_*obe 6

该程序不会返回提示(我已通过终端运行它).这是为什么?

因为s.hasNext()将阻塞直到进一步输入可用,并且只有在遇到流结束时才返回false.

来自文档:

如果此扫描器的输入中有另一个标记,则返回true.在等待输入扫描时,此方法可能会阻塞.

在unix系统上,您可以通过键入Ctrl+ 来结束流,D这会正确地将控制权返回给提示符,(或者通过键入Ctrl+来终止整个程序C).

我该如何纠正?

你也可以

  • 保留一些用于终止程序的输入字符串,如JJ所建议的,或者
  • 你可以依靠用户用Ctrl + D关闭输入流,或者你可以
  • 将循环包含在try/catch中,让另一个线程中断主线程然后正常退出.
  • 这样做System.in.close()从另一个线程编程.