按 Enter 触发 System.in.read() 两次?

Pressing Enter Triggers System.in.read() twice?

出于某种原因,每当我在循环中使用 System.in.read() 时按下 ENTER 键,代码立即执行两次。如果它不在循环中,它将执行一次!这是为什么?

这里是测试它的代码片段:

while(true) {
    System.in.read();
    System.out.println("I am supposed to print once, but I print twice!");
}

发生这种情况的原因是当您按回车键时,System.in.read() 将注册两个字符。这应该用作扫描仪的更复杂版本,而不是使用扫描仪,您可以在其中执行 Scanner.nextLine() 或 Scanner.nextInt() ,其中 return 一个字符串或一个整数,它 return 将所有内容都作为字符代码。例如,如果我输入 "a" 并按回车键,它会在控制台上打印出 97、13 和 10。但是,如果您使用 (char) 97 将第一个数字 (97) 转换为 char,您将得到 "a" 返回。现在,如果您查看最后两个按钮,它们就是回车按钮。 13 是按下输入按钮,10 是在释放输入按钮时创建新的换行符。因此,无论何时按下按钮,都会触发 System.in.read() ,从而触发 运行 循环中的代码。但是,当您释放时它也会再次执行,因为您刚刚通过释放回车按钮再次触发了它,这也触发了 System.in.read()。因此,为了解决这个问题,请执行以下操作:

while(true) {
    if(System.in.read() == 13) {
        System.out.println("I now only execute once like I should! :D");
    }
}

如果您愿意,也可以做 10 个,但我更喜欢使用 13 个。希望对您有所帮助!