Do-While循环Java输出错误

时间:2016-02-27 17:23:45

标签: java powershell java-8 windows-7-x64 do-while

我正在通过" Java初学者指南,第六版"作者:Herbert Schildt。

在Windows Powershell中使用Windows 7 Home Premium 64位和Java 1.8.0_73。

当我编译本练习时(没有编译器警告或错误):

class DoWhileDemo {
    public static void main( String[] args )
    throws java.io.IOException {
        char ch;

        do {
            System.out.print( "Press a key followed by ENTER: " );
            ch = (char) System.in.read();
        } while( ch != 'q' );
    }
}

当我使用' java DoWhileDemo'我得到了

Press a key followed by ENTER: f
Press a key followed by ENTER: Press a key followed by ENTER: Press a key followed by ENTER: q

程序按预期退出(当我点击' q'然后按ENTER键),但多次打印"按一个键然后按ENTER:"不是。

为什么会发生这种情况?

2 个答案:

答案 0 :(得分:1)

声明

ch = (char) System.in.read();

读入单个字符。当用户按下qenter时,会向您的代码发送三个字符:

q
\r
\n

在Windows系统上。因此,在输入队列中没有任何内容并且代码停止读取之前,您将再循环两次。

在Linux上,您只会看到一个额外的提示,因为在这种情况下只会发送两个字符(q\n)。

如果你想处理整行(就像你看到的那样),你必须将System.in包裹在BufferedReader中,这样你才能调用readLine()

答案 1 :(得分:-1)

这是因为当您按f表示它不等于q时,条件为真,当您按q条件变为false并循环退出时,循环执行一次又一次