1.因为System.in.read()每次返回一个byte型的数据2.\n前面还有\r
while((ch=(char)System.in.read())!='\r')abcd就是输出一次了

解决方案 »

  1.   

    原因是这样的
    在你按了回车以后,你是进行了一个操作,而实际上计算机进行了两部操作
    你按的那一下包括'\r'(先)和'\n'(后)两个操作,遇到'\r'是将abcd又打印了一遍!
      

  2.   

    还是不明白下面这个问题:
         程序执行strDir.append(ch);之后,不紧接着执行System.out.println(strDir) , 而是在 输入换行后 才一起执行 
        是怎么回事?
        换句话说,我的意思是,程序结果为什么不是a(a)b(ab)c(abc)d(abcd)
        括号外为输入,括号内为程序的输出
        括号没有其他意义,不代表输出