`
webcode
  • 浏览: 5949443 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

一个简单的怪问题

阅读更多

一个学员问了一个关于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所示,与我们预期的一样。

<shapetype id="_x0000_t75" stroked="f" filled="f" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t" o:spt="75" coordsize="21600,21600"><stroke joinstyle="miter"></stroke><formulas><f eqn="if lineDrawn pixelLineWidth 0"></f><f eqn="sum @0 1 0"></f><f eqn="sum 0 0 @1"></f><f eqn="prod @2 1 2"></f><f eqn="prod @3 21600 pixelWidth"></f><f eqn="prod @3 21600 pixelHeight"></f><f eqn="sum @0 0 1"></f><f eqn="prod @6 1 2"></f><f eqn="prod @7 21600 pixelWidth"></f><f eqn="sum @8 21600 0"></f><f eqn="prod @7 21600 pixelHeight"></f><f eqn="sum @10 21600 0"></f></formulas><path o:connecttype="rect" gradientshapeok="t" o:extrusionok="f"></path><lock aspectratio="t" v:ext="edit"></lock></shapetype><shape id="_x0000_i1025" style="WIDTH: 371.25pt; HEIGHT: 145.5pt" type="#_x0000_t75"><imagedata o:title="" src="file:///C:%5CDOCUME~1%5Cflx%5CLOCALS~1%5CTemp%5Cmsohtml1%5C01%5Cclip_image001.png"></imagedata></shape>

1

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

<shape id="_x0000_i1026" style="WIDTH: 371.25pt; HEIGHT: 132.75pt" type="#_x0000_t75"><imagedata o:title="" src="file:///C:%5CDOCUME~1%5Cflx%5CLOCALS~1%5CTemp%5Cmsohtml1%5C01%5Cclip_image003.png"><font size="3"></font></imagedata></shape>

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');
}

分享到:
评论

相关推荐

    你必须知道的495个C语言问题

    中,如果不关心a[]的哪一个分量会被写入,这段代码就没有问题,i也的确会增加1,对吗? 3.11 人们总是说i=i++的行为是未定义的。可我刚刚在一个ANSI编译器上尝试过,其结果正如我所期望的。 3.12 我不想学习那些...

    《你必须知道的495个C语言问题》

    中,如果不关心a[]的哪一个分量会被写入,这段代码就没有问题,i也的确会增加1,对吗? 38  3.11 人们总是说i=i++的行为是未定义的。可我刚刚在一个ANSI编译器上尝试过,其结果正如我所期望的。 38  3.12 我不...

    你必须知道的495个C语言问题(PDF)

    4.4 我有个函数,它应该接受并初始化一个指针void f(int *ip) f static int dummy = 5; ip = &dummy;g 但是当我如下调用时: int *ip; f(ip); 调用者的指针却没有任何变化。. . . . . . . . . . . . . . . 18 4.5 我...

    Battle Game:一个简单的回合制战斗程序-开源

    这是一个相当简单的战斗程序,我已经从事了很长一段时间。 基本上,您只是与怪物战斗,而当您杀死一个怪物时,就会产生一个新的怪物。 我几乎可以保证会出现错误。 对此我感到抱歉,如果您遇到任何问题,请告诉我,...

    C语言FAQ 常见问题列表

    o 7.1 我在一个源文件中定义了 char a[6], 在另一个中声明了 extern char *a 。为什么不行 ? o 7.2 可是我听说 char a[ ] 和 char *a 是一样的。 o 7.3 那么, 在 C 语言中 ``指针和数组等价" 到底是什么意思 ? ...

    各种Android Dialog创建及其监听事件实现

    6 创建自定义列表对话框 笔者为该对话框添加了自定义的布局文件 该自定义布局文件包含一个文本标签和一个文本框 并实现了确定按钮点击监听事件 在文本框输入内容后 获取文本框里的内容 并以toast形式显示出来 ...

    修正:魔法艺术修改器

    这次修正了一个刷新列表的问题,还有就是游戏关闭后再开时的修改问题.正在写对程序进行版本校验和直接把修改功能补到游戏主程序上还有自动更新的功能...不过可能要过一段时间再更新了,,,忙ING....

    电机驱动模块L298N

    最近在开发一个基于STM32的智能小车,用的...关于这个模块最棘手的问题,切记了,模块一定要共地,也就是说,电源有两个,一个12V的给小车的电机供电的,一个5V给单片机供电的,但是GND一定要接到一起,不然小车不能动!

    51单片机晶振的问题总结.doc

    而单片机在运行的时候,需要一个脉冲信号,做为自己执行指令的触发信号,可以简单的想象为:单片机收到一个脉冲,就执行一次或多次指令。  在初学51单片机的时候,总是伴随很多有关与晶振的问题,其实晶振就是如同...

    绕过怪物:一种更快更简单的优化算法,适用于可实现性下的上下文强盗-研究论文

    我们的结果提供了从上下文强盗到离线回归的第一个通用和最佳减少,解决了上下文强盗中一个重要的开放问题。 我们的结果的一个直接结果是,离线回归的任何进步都会在统计和计算上立即转化为上下文强盗。 这导致更快...

    dungeons-and-projects:将技术债务想象成一个幻想城市,它的建筑物有地下地牢,里面住着可怕的怪物

    地下城与项目把技术债务想象成一个幻想城市,它的建筑有地下地牢,里面住着可怕的怪物。 什么是技术债务? 程序源代码中的那些缺陷,如缺乏可读性或模块化,不直接影响程序运行(因此它们不是错误),但任何接触代码...

    Linux中文件执行中的锁定的怪现象

     这实际上并不是一个真正的问题,因为只要你的基础知识扎实,这个问题显然很简单,原因只有一个,那是linux文件基于引用计数。现在问题是这些个命令如何来操作一个文件的引用计数。下面的讨论都是基于独占打开的模

    rss浏览器-demo

    需求是一个同学拜托的,很怪,所以就写了个demo,不过感觉结构还好,如果能扩展应该还有很多要修改的地方,感兴趣的朋友可以一起研究研究,现在公布全部代码。 代码主要是使用rome这个包,在读取xml文件时用的是...

    Oracle 11gr2 RAC安装图文教程 所需要的RPM包.rar

    而当其中一个实例因为某种缘故挂掉(睡觉)的时候,另一个实例还能够维持数据库的运行,不至于让系统因为数据库的原因而出现问题。所需要的RPM包:compat-libcap1-1.10-1.i686.rpmcompat-libcap1-1.10-1.x86_64....

    SocketWeather:一个简单的澳大利亚气象应用程序,它使用BOM表数据。 受Pocket Weather启发

    它可能会暂时中断,但是当它启动时,我们可以使用一个简单的气象应用程序。 它可以在。 该应用程序仍处于开发的早期阶段。 代码,UI和功能集可能会发生很大变化。 如果您希望看到任何功能或改进,请随时提交问题以...

    cotitan:一款以对抗大型怪物为主题的合作游戏

    泰坦cotitan 是一款回合制多人游戏,以杀死大型物体(泰坦)为中心。...依赖关系Erlang 运行时一个诅咒库(ncurses 或 pdcurses 应该没问题) 线程建造假设您具有上面列出的正确依赖项,一个简单的make就足够了。

    7个回归分析方法思维导图.png

    7个回归分析方法 什么是回归分析? 回归分析是一种预测性的建模技术,它研究的是因变量(目标)和自变量(预测器)之间的关系。 这种技术通常用于 ... 使用观测值和预测值之间的一个简单均方差来衡量你的预

    第三讲-大型互联网高可用网站业务架构设计实践.docx

    那么,我们需要对线上服务产生的任何征兆,哪怕是一个小问题,也要刨根问底: 这就需要我们有技术攻关的能力,对任何现象都要秉着以下原则: 为什么发生? 发生了怎么应对? 怎么恢复? 怎么避免? 对问题要彻查,不...

Global site tag (gtag.js) - Google Analytics