黑马程序员技术交流社区

标题: 请教关于while循环条件表达式的问题 [打印本页]

作者: 陈国斌    时间: 2013-5-2 08:31
标题: 请教关于while循环条件表达式的问题
本帖最后由 陈国斌 于 2013-5-3 23:28 编辑

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

作者: harborbest    时间: 2013-5-2 09:48
尹桥印 发表于 2013-5-2 09:30
楼上代码写错了吧。读取的动作还要写到循环里面
int len=fr.read(buf);//给len定义一个初值
while((len! ...

对,没仔细看
作者: 陈国斌    时间: 2013-5-2 09:51
表示感谢
作者: 高正新    时间: 2013-5-2 10:01
本帖最后由 高正新 于 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循环结束。
这样应该明白了吧
作者: 刘胜寒    时间: 2013-5-2 10:51
拎转提示,如果问题以解决。。请修改分类..谢谢
作者: 黎阳05    时间: 2013-5-2 15:28
我知道楼主的纠结所在,while表达式里面的条件在判断之前会先执行,即先执行fr.read(buf),得到一个返回值再进行判断。
作者: strawberry2013    时间: 2013-5-2 15:39
这个问题我刚开始看到时候也疑惑,最后百度才知道!

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

知寡人者,8楼哥们也!既然是条件判断语句就应该只用作判断啊!但从后边的代码来看,它又不仅仅是在做判断




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2