一个简单的怪问题
2006-08-09 15:55
357 查看
一个学员问了一个关于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');
}
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');
}
相关文章推荐
- 由一个简单算法想到的程序员素养问题
- Linux下的一个简单汇编程序, .long声明数据的长度问题!
- linux中卸载jdk,一个简单问题整了一下午
- 一个简单又不简单的问题——什么是富有实践经验的技术人员
- 一个简单的问题
- WinForm:一个登陆窗体引发的问题系列(一):最简单的登陆窗口
- 又是一个简单的问题浪费一上午
- 一个简单问题的并行算法
- 我也提一个关于递归的问题,代码简单,不绕,希望一起讨论一下~
- 一个简单的数论问题
- 一个简单的问题引发的思考
- Radio Button,一个简单问题的解决方案
- 一个简单的初始化问题
- [VB.NET]请教一个比较简单的问题
- 强大的C# Expression在一个函数求导问题中的简单运用
- [VB.NET]一个简单的问题?
- 一个简单的内联union问题
- 一个简单的测试:iPhone电池续航时间短并非硬件问题
- 超简单的一个解决JAVA Enumeration问题的方案
- 关于一个简单ATM系统的UML建模——问题描述&词汇表&领域类图