黑马程序员技术交流社区

标题: 大家帮解释一下原因吧。 [打印本页]

作者: 李哲    时间: 2012-3-22 11:09
标题: 大家帮解释一下原因吧。
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循环差别很大吗?为什么结果很不一样?什么原因?
作者: 杨朝辉    时间: 2012-3-22 11:17
第二个for循环中,一次循环调用了两次fr.read(),判断条件中读取了一个字符,输出语句中输出的是下一个字符。
作者: 刘元明    时间: 2012-3-22 13:14
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());
                }
                */

作者: 周建    时间: 2012-3-22 15:45
楼上正解
作者: 唐朋    时间: 2012-3-22 16:27
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());
                }
                */
        }
}
第一种方式是读取什么打印什么,第二种方式是隔一个字符进行打印


作者: OMG    时间: 2012-3-22 20:11
  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,执行后的操作      空

总结:一次循环,两次读取,一次打印,所以会有一半的字符被丢弃;




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