2017-08-14 81 views
1
class demoWhile{   
public static void main(String args[]) 
    throws java.io.IOException{ 
     char ch = (char)System.in.read(); 
     while(ch!='w'){ 
      System.out.println("Hi"+ch); 
      ch = (char)System.in.read(); 
     } 
    } 
} 

-first我给了输入'r',期望的输出是“Hir”然后是输入选项,但是接收到的输出是Hir,Hi,Hi然后是输入选项。为什么它显示两个额外的嗨,嗨?java while循环错误?额外的输出代码有什么问题?

+3

你在windows上运行它,并在'r'后按Enter键? – f1sh

回答

5

我怀疑你在Windows机器上运行这个,并在'r'后面按Enter。如果情况并非如此,请忽略此答案。

输入被理解为一个换行符,它由两个字节0D 0A组成。在字符串文字中,这些通常表示为"\r\n"

这会导致读取三个字符:'r','\ r'(char 13)和'\ n'(char 10)。

你的代码单独处理它们,所以输出

 
Hir 
Hi\r 
Hi\n 

但与\ n不得到显示\ r因为它们只有一个作用(在Windows上),当你将它们结合起来。

+0

你说得对。输入数值'r'后按Enter键。 –

+0

有没有办法避免它? –

+0

据我所知,您只需输入以指示您正在使用的shell(命令提示符),即输入已完成。换行符然后指示shell将所有输入转发给应用程序。你可以通过在“ch == 13 || ch == 10”时不打印/做任何事情来“过滤”这个输入。 – f1sh