黑马程序员技术交流社区

标题: 一个判断不解的问题 [打印本页]

作者: 张卫刚    时间: 2013-3-16 17:32
标题: 一个判断不解的问题
本帖最后由 张卫刚 于 2013-3-16 21:55 编辑

public static void main(String[] args) throws IOException
        {
                //创建一个读取流对象和文件相关联。
                FileReader fr = new FileReader("buf.txt");

                //为了提高效率。加入缓冲技术。将字符读取流对象作为参数传递给缓冲对象的构造函数。
                BufferedReader bufr = new BufferedReader(fr);
               
                String line = null;

                while((line=bufr.readLine())!=null)//这句为什么不直接写成bufr.readLine()!=null  为什么多定义一个line变量
                {
                        System.out.print(line);
                }
                bufr.close();
        }
作者: 马甲大王    时间: 2013-3-16 17:43
while((line=bufr.readLine())!=null)//这句为什么不直接写成bufr.readLine()!=null  为什么多定义一个line变量  
                {
                        System.out.print(line);
                }

因为如果你那么写的话,你的输出语句就要写成 System.out.print(bufr.readLine());?

如果是这样的话,输出的语句就会隔行输出了,应为你的这句话出现的两次bufr.readLine()都要换行的。
但是你要是line=bufr.readLine()的话是每次输出line,是不换行的。
这个我可深有体会。
作者: 郝强勇    时间: 2013-3-16 18:45
      这是跟readLine方法底层实现有关,readLine方法是内部是有指针的,每执行一次readLine方法指针就会向下移动一个位置,这跟集合中的next方法是一个意思。
    在看具体代码,在while(bufr.readLine())中指针指向一个流中字符,我们想输出这个字符,但在打印这个字符时System.out.print(bufr.readLine())又执行了一次bufr.readLine()方法,也就是说指针上次指向的字符还没有打印指针又向下移动了一个,打印的就不是while循环中的bufr.readLine()方法读到的字符而是下一个字符了,所以就用line变量记住bufr.readLine()方法返回的字符,输出时输出line变量就ok啦。
作者: 刘凯    时间: 2013-3-16 19:19
因为后边要输出读到的内容啊 ,先找一个中间变量存起来  然后输出  ps:36分的大神 这个问题就给技术分  难道斑竹大人好意思不给25的菜鸟点鼓励么。。。{:soso_e197:}
作者: 唐永康    时间: 2013-3-16 19:35
public static void main(String[] args) throws IOException
        {
                //创建一个读取流对象和文件相关联。
                FileReader fr = new FileReader("buf.txt");

                //为了提高效率。加入缓冲技术。将字符读取流对象作为参数传递给缓冲对象的构造函数。
                BufferedReader bufr = new BufferedReader(fr);
               
                String line = null;

                while((line=bufr.readLine())!=null)//这句为什么不直接写成bufr.readLine()!=null  为什么多定义一个line变量
                {
                        System.out.print(line);
                }
                bufr.close();
        }







作者: 陈丽莉    时间: 2013-3-16 19:53
若还有问题,请继续追问,没问题了,请将帖子分类改成【已解决】~
作者: 刘凯    时间: 2013-3-16 19:54
刘凯 发表于 2013-3-16 19:19
因为后边要输出读到的内容啊 ,先找一个中间变量存起来  然后输出  ps:36分的大神 这个问题就给技术分  难 ...

斑竹大人,虽然就一句话,但就这一句话点破了呀,就是这么个简单的问题嘛 。。。
作者: 刘凯    时间: 2013-3-16 19:59
刘凯 发表于 2013-3-16 19:54
斑竹大人,虽然就一句话,但就这一句话点破了呀,就是这么个简单的问题嘛 。。。 ...

{:3_60:}  画个圈圈诅咒你 {:3_67:}




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