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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李哲 中级黑马   /  2012-3-22 11:09  /  1835 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

import java.io.*;
class FileReaderDemo
{
        public static void main(String[] args)  throws IOException
        {
                FileReader fr=new FileReader("demo.txt ");//文件内容:abedg

                for (int ch=0;(ch=fr.read())!=-1; )
                {
                        System.out.println((char)ch);
                }

                /*
                for (;fr.read()!=-1; )
                {
                        System.out.println((char)fr.read());
                }
                */
        }
}

上面的两个for循环差别很大吗?为什么结果很不一样?什么原因?

6 个回复

倒序浏览
第二个for循环中,一次循环调用了两次fr.read(),判断条件中读取了一个字符,输出语句中输出的是下一个字符。
回复 使用道具 举报
for (int ch=0;(ch=fr.read())!=-1; )//一次循环你只调用了一次read()方法                {
                        System.out.println((char)ch);
                }

                /*而在下边这个循环中你调用了两次read()方法,且两次读的字符不一样
                for (;fr.read()!=-1; )
                {
                        System.out.println((char)fr.read());
                }
                */

评分

参与人数 1技术分 +1 收起 理由
房宝彬 + 1

查看全部评分

回复 使用道具 举报
楼上正解
回复 使用道具 举报
import java.io.*;
class FileReaderDemo
{
        public static void main(String[] args)  throws IOException
        {
                FileReader fr=new FileReader("demo.txt ");//文件内容:abedg
                这种方法表示读取一个字符,把读取的结果存如ch里,是读取一个,打印一个
                for (int ch=0;(ch=fr.read())!=-1; )
                {
                        System.out.println((char)ch);
                }

                /*
              此种方法是读取一个字符
                for (;fr.read()!=-1; )
                {
                    从循环的结果后面再读一个字符进行打印,
                        System.out.println((char)fr.read());
                }
                */
        }
}
第一种方式是读取什么打印什么,第二种方式是隔一个字符进行打印

评分

参与人数 1技术分 +1 收起 理由
房宝彬 + 1

查看全部评分

回复 使用道具 举报
  for (;fr.read()!=-1; ) {
        从循环的结果后面再读一个字符进行打印,
        System.out.println((char)fr.read())
  }


这个循环细节:
1,初始化                 空
2,循环条件             fr.read()!=-1    不同与x<10              已经读取了一次
3,执行语句             System.out.println((char)fr.read())    先读取再打印刚读取的字符
4,执行后的操作      空

总结:一次循环,两次读取,一次打印,所以会有一半的字符被丢弃;
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马