A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 赵许星 中级黑马   /  2013-11-4 14:44  /  986 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

看下面代码
InputStream in = System.in;
int ch = 0;
while((ch=in.read()) != -1)
{
        System.out.println(ch);
}

结果:
当输入abc(换行符),
为何出来的是
97
98
99
13
10
不应该只有
97
才对嘛,因为定义的int ch,一次只能接受一个字符

评分

参与人数 1技术分 +1 收起 理由
乔兵 + 1

查看全部评分

5 个回复

倒序浏览
本帖最后由 Mr.Z.Lee 于 2013-11-4 14:53 编辑

因为回车键,换行符也是字符啊,你可以对回车键做测试就知道输出13
回复 使用道具 举报
Mr.Z.Lee 发表于 2013-11-4 14:50
因为回车键,换行符也是字符啊,你可以对回车键做测试就知道输出13

重点是:“因为定义的int ch,一次只能接受一个字符”
回复 使用道具 举报
赵许星 发表于 2013-11-4 15:09
重点是:“因为定义的int ch,一次只能接受一个字符”

就是因为一次只能接受一个字符,  你又是一个while循环     
所以会把 你的 'a' 'b' 'c' 换行符 回车  一个个都输出。。。。
回复 使用道具 举报
本帖最后由 麦者 于 2013-11-4 18:05 编辑

在上面的流中其实是有指针的,刚开始指针的位置在流的头部就是97的前面, 当你第一个读过之后,指针就相应递增到97和98之间,由于是while循环,所以
当出口条件:in.read()!=-1不满足时,read()方法会一直执行的,所以输出的
是5个字符(有两个是换行符)。



评分

参与人数 1技术分 +1 收起 理由
To + 1 很给力!

查看全部评分

回复 使用道具 举报
重点是:“因为定义的int ch,一次只能接受一个字符”
但是你写的是循环while,当然会全部read。呵呵
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马