我正在阅读 Herbert Schildt 撰写的“Java 初学者指南,第六版”。
在 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:”却没有。
有什么想法为什么会发生这种情况吗?
声明
ch = (char) System.in.read();
读取单个字符。当用户按 q
和 enter
时,三个字符将发送到您的代码:
q
\r
\n
在 Windows 系统上。因此,在输入队列中没有任何内容并且代码停止读取之前,您会再通过循环两次。
在 Linux 上,您只会看到一个额外的提示,因为在这种情况下,只会发送两个字符 (q\n
)。
如果您想要处理整行(正如您所看到的那样),则必须将 System.in
包装在 BufferedReader
中,以便可以调用 readLine()
。
我是一名优秀的程序员,十分优秀!