代码改变世界

一个简单的怪问题

2006-08-09 15:55  java ee spring  阅读(167)  评论(0编辑  收藏  举报

一个学员问了一个关于IO的怪问题,问题是这样的:读取键盘输入的一个字符,然后打印输出这个字符,在打印字符的前面和后面分别加了一个字符串,程序的代码如下:

 

public class Test

{

       public static void main(String [] args) throws Exception

       {

              System.out.print("Input a char:");

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

              System.out.println("hello" + ch + "AB");

       }

}

 

编译并运行这个程序。

1)输入字符“a”,命令行窗口打印输出的结果如图1所示,与我们预期的一样。

1

 

2)重新运行这个程序,直接按下回车键,在命令行窗口打印输出的结果如图2所示。这时,打印输出的结果是:打印语句中字符后面的字符串“替换”了字符前面的字符串中的部分字符,即打印输出字符串“ABllo”。

2

 

请大家都来想一想,为什么在输入普通字符时,输出的结果是正常的;而直接按下回车键,后面的字符串就“替换”了前面的字符串,并且没有输出回车换行符呢?

 --------------------

上面的问题,是我分析出原因后,为了讲课方便,重新调整的例子,并且写出了错误规律。其实,学员最初的问题非常隐蔽,并没有我上面的案例这么直接,并且找不出错误规律。下面是他当初的程序代码。

 public static void main(String [] args) throws Exception{

  String str="";
  char ch0=0;
  
  System.out.print("intput string and String:");
  do{
   ch0=(char)System.in.read();
   str+=ch0;
  }while(ch0!='#');
  char ch/*='0'*/;
  System.out.print(str);
  ch=(char)System.in.read();
System.out.println("hello" + ch + 'b'); 
 }