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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 谭荣强 高级黑马   /  2014-3-14 15:30  /  899 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

帮忙看看while循环里面的两个输出语句输出结果怎么不一样啊
import java.io.*;
class  day1810
{
        public static void main(String[] args)
        {
                //创建一个文件读取流对象,和指定名称的文件相关联。
                //要保证该读取文件是已经存在的,如果不存在,报FileNotFounderException
                FileReader fi=null;
                try
                {
                        fi= new FileReader("demo.txt");
                        int num = 0;
                        while ((num=fi.read())!=-1)
                        {
                                //System.out.print((char)num);
                                System.out.print((char)fi.read());//"demo.txt"是hahaa00000000aha                               
                        }                       
                }
                catch (Exception e)
                {
                        System.out.println(e.toString());
                }
                finally
                {
                        try
                        {
                                fi.close();
                        }
                        catch (Exception e)
                        {
                                System.out.println(e.toString());
                        }
                       
                }       
               
        }
}

评分

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

查看全部评分

6 个回复

正序浏览
懂了  谢谢各位
回复 使用道具 举报
chen_x 发表于 2014-3-14 17:00
每次执行fi.read()都是读取demo.txt文件的一个字符,返回该字符,然后将读文件指针移到下一个字符处,下次 ...

最后一点说错了,是打印偶数位字符串(如果从1数的话)。
回复 使用道具 举报
每次执行fi.read()都是读取demo.txt文件的一个字符,返回该字符,然后将读文件指针移到下一个字符处,下次再调用fi.read()就是返回这个字符,然后再将读文件指针移动一位,如此反复,直接到达文件末尾,返回-1.

你程序里while ((num=fi.read())!=-1)每次判断循环条件时fi.read()执行一次,然后 System.out.print((char)fi.read());打印时又执行了一次fi.read(), 所以最后读出来的字符是demo.txt中隔一个字符才打印一个字符,只打印奇数位(从1开始数的话)。

评分

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

查看全部评分

回复 使用道具 举报
两次调用了read()方法,所以造成值不一样
回复 使用道具 举报
本帖最后由 daoyua 于 2014-3-14 17:09 编辑

fi相当个指针,你第一个是num是指针,read读取的字符,你第二个输出在读取了一次,读取一次会移动一次指针,指针位置变了,当然字符就不一样了

评分

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

查看全部评分

回复 使用道具 举报
fi.read() 没执行一次就读一次数据,在while ((num=fi.read())!=-1)中已经把数据读出来存入到num中,循环体中又调用了一次fi.read(),这次读取的值是下一个字符了。

评分

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

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马