发生这种情况的原因是,当您按Enter键时,System.in.read()将注册两个字符。应该将其用作扫描仪的更复杂版本,而不是使用扫描仪来执行Scanner.nextLine()或Scanner.nextInt()来返回字符串或整数,而是将所有内容作为char返回码。例如,如果我键入“
a”并按回车,它将在控制台输出97、13和10。但是,如果您使用(char)97将第一个数字(97)转换为一个char来进行转换,则会得到一个“
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。希望这对您有所帮助!



