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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 韩新凯 中级黑马   /  2012-4-15 13:38  /  1623 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 韩新凯 于 2012-4-18 15:17 编辑

import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

public class FileReaderDemo2 {
        public static void main(String[] args) {
                FileReader fr = null;
                try {
                        fr = new FileReader("fw.txt");
                        char[] buf = new char[3];
/*
int num = 0;
while((num=fr.read(buf))!=-1){
        System.out.println(new String(buf,0,num));
}*/
} catch (FileNotFoundException e) {
                        e.printStackTrace();
                } catch (IOException e) {
                        e.printStackTrace();
                }

        }
}
输出正常结果,
为什么把/**/之间的代码换成
/*int num = fr.read(buf);
while(num!=-1){
        System.out.println(new Strng(buf,0,num));
}
*/
输出结果只有前面3个字符,而且还是一个死循环?

评分

参与人数 1技术分 +1 收起 理由
岳民喜 + 1

查看全部评分

5 个回复

倒序浏览
你把num = fr.read(buf) 定义在循环外边
肯定就只执行一次。

char[] buf = new char[3];
你又定义每次读三个字节 所以它就只读你输入的前三个字节。

因为num!=-1 永远不能为flase 所以是个死循环

评分

参与人数 1技术分 +1 收起 理由
岳民喜 + 1

查看全部评分

回复 使用道具 举报
你把定义的变量num=fr.read()写在循环的外面

那么循环里的的判断条件num始终不等于-1;  也就是始终符合条件

那就肯定会一直循环下去
回复 使用道具 举报
你把num = fr.read(buf) 定义在循环外边
肯定就只执行一次。

char[] buf = new char[3];
你又定义每次读三个字节 所以它就只读你输入的前三个字节。

因为num!=-1 永远不能为flase 所以是个死循环
回复 使用道具 举报
懂了,谢谢
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马