按Enter继续奇怪(Java)

时间:2015-04-26 02:21:24

标签: java enter continue

我正在使用此代码输出文本,并让用户按输入以显示下一行对话框。但是,按 Enter 会显示两行文字。这是为什么?

public void pressEnterToContinue() {
    try {
        System.in.read();
    } catch(Exception e) { }
}

作为参考,该方法如下所示:

pressEnterToContinue();
System.out.println("This is a line of text.");
pressEnterToContinue();
System.out.println("So is this.");
pressEnterToContinue();
System.out.println("And this.");
//etc.

第一行单独显示“这是一行文字”。该方法一直等到用户按下回车键,然后它显示接下来的两行(“这是这个。”和“和这个。”),它应该只显示一行。

我确实尝试过短暂延迟,但这并未解决问题。

2 个答案:

答案 0 :(得分:2)

按回车键回显为新行。 println引入了另一条线。当您在控制台上键入时,O.S。回显每个字符,因此,您的输入会被回显,然后您的代码会再次在屏幕上打印出来。之所以如此,是因为你正在处理一个shell,它本身就是一个程序,它可以拾取你的击键并回复它们。

可以编写一个shell,它不回显用户输入,但对于易犯错误的人类来说是不切实际的。您可能想要在各自的端口上尝试telneting到smtp服务器或http服务器,并键入相应的命令来发送邮件或获取html页面。那里没有回音。这感觉很奇怪。

答案 1 :(得分:0)

System.in.read()读取一个字节。我的猜测是你在一个平台上运行你的代码,其中换行符由两个字节的CR LF序列表示,因此按Enter键可以满足CR的第一个System.in.read()调用,第二个System.in.read( )用LF打电话。更改您的代码以使用System.console().readline()应该解决此问题,但请查看discussion and other approaches described heresolutions discussed here

这里有关于如何在各种平台上展示换行信息的链接。