Java 扫描仪从第二次开始工作

标签 java console java.util.scanner

我试图在按下控制台中的 Enter 键后调用一个方法。问题是从我第二次按 Enter 时调用该方法。第一次按下 Enter 后如何调用我的方法?

public void read() {
    Scanner scanner = new Scanner(System.in);
    System.out.println("Press Enter to continue");
    try {
        System.in.read();
    } catch (IOException e) {
        e.printStackTrace();
    }
    if (scanner.hasNextLine()) {
        this.win();
    }
}
public void win() {
    if (true) {
        this.read();
    }
}

最佳答案

等待 Enter 按下的代码在 Scanner 看到该字符之前从输入流中“窃取”该字符。因此,第一个 '\n'System.in.read() 行消耗。

当您基于控制台调用 Scannerscanner.hasNextLine() 时,代码会阻塞以查看最终用户是否输入一行或终止流。 hasNextLine 方法需要返回第二个 '\n'

您可以通过删除对 System.in.read() 的调用并调用 getNextLine() 来在下次调用之前使用输入来解决此问题:

public void read() {
    Scanner scanner = new Scanner(System.in);
    System.out.println("Press Enter to continue");
    try {
        System.in.read();
    } catch (IOException e) {
        e.printStackTrace();
    }
    if (scanner.hasNextLine()) {
        scanner.nextLine(); // Remove '\n' from the buffer
        this.win();
    }
}

关于Java 扫描仪从第二次开始工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47638501/

相关文章:

java - 如何等待队列包含元素?

java - Twitter 抄写员和 clojure "The access_token method must be called with a request_token"

java - 使用分隔符分隔模式

Java [基础] 对象问题

java - 如果在 linux 上的 jboss 4 中的 JAVA_OPTS 中多次声明变量怎么办

Java - 如何将数组的每个元素复制到ArrayList?

javascript - 代码不等待回调函数完成

perl - 如何在 Windows 上为 Perl 脚本的输出文本着色?

c# - .NET 控制台应用程序。长阻塞操作取消无限循环的方法

java - 读取包含括号的文件中的整数值