java扫描程序类中的nextLine()、hasNextLine()和NoSuchElementException

java扫描程序类中的nextLine()、hasNextLine()和NoSuchElementException,java,io,java.util.scanner,Java,Io,Java.util.scanner,如果我们使用扫描器进行控制台输入,我们有两种方法来编写输入循环 一, 二, 我相信第二个方法更正确,因为hasNextLine()javadoc中提到这个方法正在等待新的行。但是,为什么第一个解决方案也可以工作,并且等待一行新的代码而不出现任何异常呢?当到达输入的末尾时,您的第一个解决方案将抛出异常(例如,在linux上,当用户按下Ctrl+D时,或者当您将一个文件导入到输入中,然后我们到达文件的末尾时)。第二个解决方案将优雅地退出 如果您只使用交互式命令行,而从不发送文件结束信号,则没有区别

如果我们使用扫描器进行控制台输入,我们有两种方法来编写输入循环

一,

二,


我相信第二个方法更正确,因为hasNextLine()javadoc中提到这个方法正在等待新的行。但是,为什么第一个解决方案也可以工作,并且等待一行新的代码而不出现任何异常呢?

当到达输入的末尾时,您的第一个解决方案将抛出异常(例如,在linux上,当用户按下
Ctrl+D
时,或者当您将一个文件导入到输入中,然后我们到达文件的末尾时)。第二个解决方案将优雅地退出

如果您只使用交互式命令行,而从不发送文件结束信号,则没有区别

    Scanner scanner = new Scanner(System.in);
    while (true) {
        System.out.println(scanner.nextLine());
    }
    Scanner scanner = new Scanner(System.in);
    while (scanner.hasNextLine()) {
        System.out.println(scanner.nextLine());
    }