出于某种原因,每当我在循环中使用ENTER
时按System.in.read()
键,代码会立即执行两次。如果它不在循环中,它将执行一次!这是为什么?
以下是测试它的代码段:
while(true) {
System.in.read();
System.out.println("I am supposed to print once, but I print twice!");
}
答案 0 :(得分:-2)
您遇到这种情况的原因是因为当您按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.希望这有帮助!