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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© Ysfox 初级黑马   /  2013-7-1 20:04  /  1773 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

我想读取一个文件
正确写法是这样:
  1. import java.io.*;
  2. class FileReaderTest
  3. {
  4.     public static void main(String[] args) throws IOException
  5.      {
  6.          FileReader fr = new FileReader("FileWriterAgain.java");
  7.          char[] arr = new char[1024];
  8.          int len =0;
  9.          while((len=fr.read(arr))!=-1)
  10.          {
  11.              System.out.print(new String(arr,0,len));   
  12.          }
  13.          fr.close();
  14.      }
  15. }
复制代码
错误写法这样:
  1. import java.io.*;
  2. class FileReaderTest
  3. {
  4.     public static void main(String[] args) throws IOException
  5.      {
  6.          FileReader fr = new FileReader("FileWriterAgain.java");
  7.          char[] arr = new char[1024];
  8.                  while((int len = fr.read(arr))!=-1)
  9.                         {
  10.                                 System.out.println(new String(arr,0,len));
  11.                         }
  12.          fr.close();
  13.      }
  14. }
复制代码
问题:我想问为什么第二种写法是错误的??

评分

参与人数 1技术分 +1 收起 理由
特殊服务 + 1 这个题目有意思。

查看全部评分

3 个回复

倒序浏览
while里面定义的变量是在含有while语句所在方法执行结束的时候才释放,所以用while来定义变量类型和名字就会每次循环就定义一次,而且变量名还是一样,就会出错了。
用代码表示就是相当于
  1. 循环一次
  2. (int len = fr.read(arr))!=-1
  3. 循环两次
  4. (int len = fr.read(arr))!=-1
  5. (int len = fr.read(arr))!=-1
  6. 循环三次
  7. (int len = fr.read(arr))!=-1
  8. (int len = fr.read(arr))!=-1
  9. (int len = fr.read(arr))!=-1
复制代码
所以楼主应该看出来错在哪里吧

评分

参与人数 1技术分 +1 收起 理由
特殊服务 + 1

查看全部评分

回复 使用道具 举报
Thank You !
回复 使用道具 举报
看回答问题已经解决,我把帖子改成已解决,如果还没有解决,请联系我。。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马