当前位置: 首页 > 面试题库 >

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

朱俭
2023-03-14
问题内容

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

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

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”并按回车,它将在控制台输出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。希望这对您有所帮助!



 类似资料:
  • 我找到了其他相关的问题,但没有一个答案实际上解决了我的问题。这个按钮在IE上很好用,但在Chrome上不行。我尝试移除span元素,将按钮放在任何其他标记之外,但仍然触发了两次。这个temple扩展了一个'base.html'文件,代码位于'main'元素中。 HTML: jQuery:

  • 问题内容: 我有以下代码,但我的问题是该事件被触发了两次。我不知道是什么原因造成的。我怀疑是由供应商前缀引起的,但并非如此。即使我只离开,它仍然会开火两次。 CSS JS 问题答案: 对于您和,每个已转换的属性都会触发。 您可以在访问与事件关联的属性。 没有“ transition s end”事件,因此您可能需要一些技巧,例如仅过滤其中一个过渡属性的回调处理。例如: ps。没有浏览器会触发该事件

  • 问题内容: 我使用的是ng-click,将其应用于SPAN标签时会触发两次。 HTML 控制器 它应该只发射一次。我如何找到这种情况的发生原因以及如何解决? 问题答案: 您提供的代码不会两次触发该事件: http://jsfiddle.net/kNL6E/(单击) 也许您两次包含Angular?如果执行此操作,则会收到两个警报,如下所示: http://jsfiddle.net/kNL6E/1/

  • 我制作了jbutton并向其添加了ActionListner,但public void actionPerformed(ActionEvent e){}中的代码执行了两次。它打印两次test,而不是只打印一次 这里是完整的代码,以防这是没有意义的。看起来问题是添加两个动作监听器到我的按钮。“if(testbut.GetActionListeners().length<1))testbut.AddA

  • 问题内容: 我是JavaFx的新手。在我的JavaFX应用程序中,我设置了onAction属性,当我使用鼠标按下按钮时,它可以正常工作。即使用户按下Enter on按钮,我也想触发同样的操作。我知道我可以使用偶数处理程序来做到这一点。但是,当我阅读onAction JavaDoc时,它说此事件通过按键触发。 属性说明: 按钮的动作,每当触发按钮时就会调用该动作。这可能是由于用户使用鼠标单击按钮,触

  • 我正在使用AWS Lambda函数(用python编写)在对象上传到预设S3 bucket时发送电子邮件。该对象通过AWS PHP SDK上传到S3 bucket中,并使用多部分上传。每当我测试我的代码(在Lambda代码编辑器页面中)时,它似乎工作得很好,我只收到一封电子邮件。 但是当对象通过PHPSDK上传时,Lambda函数运行两次并发送两封电子邮件,两者都具有不同的消息ID。我尝试了不同的