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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 陈国斌 中级黑马   /  2013-5-2 08:31  /  2017 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 陈国斌 于 2013-5-3 23:28 编辑

毕向东java视频第18天第13个视频——io流(拷贝文本文件)中有这样一段代码:
while((len=fr.read(buf))!=-1)
{
fw.write(buf,0,len);
}
while后边的括号里是条件表达式,只要括号里的代码运行完的结果是boolean型的就行,这倒是可理解,但是,括号里的内容毕竟是条件表达式,顾名思义,它的作用就应该仅仅是用来判断后边的大括号内的语句是否要执行,而在此处,它似乎还充当读取动作的执行代码。这样的写法,逻辑上不太明白,请高手指点。

评分

参与人数 1技术分 +1 收起 理由
张熙韬 + 1

查看全部评分

9 个回复

倒序浏览

回帖奖励 +1

其实就是一个简化书写的,一般可以这样写:
int len=fr.read(buf);
while(len!=-1)
{
fw.write(buf,0,len);
}
回复 使用道具 举报
尹桥印 发表于 2013-5-2 09:30
楼上代码写错了吧。读取的动作还要写到循环里面
int len=fr.read(buf);//给len定义一个初值
while((len! ...

对,没仔细看
回复 使用道具 举报
表示感谢
回复 使用道具 举报
本帖最后由 高正新 于 2013-5-2 10:30 编辑

while((len=fr.read(buf))!=-1)

len = fr.read(buf) ,fr读取一个字符赋给buf。当fr.read()将字符读完的时候,会返回一个 -1 。
(len=fr.read(buf))!=-1 这句可以看成 len!=-1 。 当 len 是 -1 的时候,就返回 false . while循环结束。
这样应该明白了吧
回复 使用道具 举报
拎转提示,如果问题以解决。。请修改分类..谢谢

评分

参与人数 1黑马币 +9 收起 理由
张熙韬 + 9 多谢!

查看全部评分

回复 使用道具 举报
我知道楼主的纠结所在,while表达式里面的条件在判断之前会先执行,即先执行fr.read(buf),得到一个返回值再进行判断。
回复 使用道具 举报
这个问题我刚开始看到时候也疑惑,最后百度才知道!

( (len=fr.read(buf))  !=  -1)
其实这个问题的关键就在于赋值表达式上,,(len = fr.read(buf) ,形如(A = B)它的返回值,就是A或者B, 再与-1进行布尔运算!
回复 使用道具 举报
黎阳05 发表于 2013-5-2 15:28
我知道楼主的纠结所在,while表达式里面的条件在判断之前会先执行,即先执行fr.read(buf),得到一个返回值 ...

知寡人者,8楼哥们也!既然是条件判断语句就应该只用作判断啊!但从后边的代码来看,它又不仅仅是在做判断
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马