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

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

这是一个测试它的代码片段:

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

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

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

如果你愿意,你也可以做10,但我更喜欢使用13.希望这有帮助!