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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 任雷彬 中级黑马   /  2012-11-10 19:49  /  2815 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

import java.io.*;
class FileReaderTest
{
public static void main(String[] args) throws IOException
{
  FileReader fr = new FileReader("javaee.java");
  char[] buf = new char[1024];
  int num = 0;                            //  改变条件   int num = fr.read(buf);
  while((num=fr.read(buf))!=-1)  //     改变条件  while(num != -1)
  {
   System.out.println(new String(buf,0,num));
  }
}
}
以上的代码打印如下:

但是将
int num = 0;                            //  改变条件   int num = fr.read(buf);
  while((num=fr.read(buf))!=-1)  //     改变条件  while(num != -1)
这两段代码做注释中的改变后会打印如下的显示

出现了死循环,是因为 while循环条件改变为
while(num!!= -1)出现了条件为true,死循环吗?

但是这两者条件的改变是因为num=fr.read(buf),成为了全局变量,而改变了原来在while条件中的局部变量的属性吗?
还是因为什么?






评分

参与人数 1技术分 +1 收起 理由
朱宏青 + 1 看你24 ..还犯这样的错误 我都不知道说什么.

查看全部评分

6 个回复

倒序浏览
???呜 你确定你仔细看了改了以后的代码?
  1.        
  2. import java.io.*;
  3. class FileReaderTest
  4. {
  5. public static void main(String[] args) throws IOException
  6. {
  7.   FileReader fr = new FileReader("javaee.java");
  8.   char[] buf = new char[1024];
  9.   int num = fr.read(buf);                            //  改变条件   int num = fr.read(buf);
  10.   while(num!=-1)  //     改变条件  while(num != -1)
  11.   {
  12.    System.out.println(new String(buf,0,num));
  13.   }
  14. }
  15. }
复制代码
请问num在循环里有被再次更改值么?有么?

while的判断你确定没搞错??...

我只能说粗心.
回复 使用道具 举报
朱宏青 发表于 2012-11-10 19:59
???呜 你确定你仔细看了改了以后的代码?请问num在循环里有被再次更改值么?有么?

while的判断你确定没搞错? ...

前面的代码,都是对的,注释的代码是我故意该的,我只是想弄清在改代码后程序后
为什么死循环?至于你的话是什么意思,我不懂。
回复 使用道具 举报
朱宏青 发表于 2012-11-10 19:59
???呜 你确定你仔细看了改了以后的代码?请问num在循环里有被再次更改值么?有么?

while的判断你确定没搞错? ...

这位版主,我不是在挣技术分,我只是在想搞懂一个问题,也许在你看来这不是什么问题,
回复 使用道具 举报
任雷彬 发表于 2012-11-10 20:11
这位版主,我不是在挣技术分,我只是在想搞懂一个问题,也许在你看来这不是什么问题,
...

while(){}

每循环一次做一次()内的判断 然后在实行{}里的内容。

呜 你把判断给拉出去了,那么num的值就不会变了呀。。。也就是说 本来每次fr.read()这个代码会返回一个值来说明下面是否还有数据,并赋予给num,然后再执行num!=-1的判断,而现在。。。num的值哪有变化过。。那么就会无限循环{}里的代码呀。。。

你仔细看看代码嘛!
回复 使用道具 举报
这样的话num的值被后面有被改变过吗?你这是逻辑问题呀。判断条件始终为真肯定死循环了
回复 使用道具 举报
李靖 中级黑马 2012-11-12 09:34:34
7#
read方法的返回值是:读取的字符数,如果已到达流末尾,则返回 -1 。很显然你第一次使用read方法是返回的是你当前读取的字符数,而由于当前读取的字符并为到达文件的末尾,因此返回值不是-1.而你的循环条件一直是第一次读取的num,所以进入死循环。假设你的文件中有三个字符的话,你第一次读取返回值是3,你第二次读取时才会是-1,你把整个条件放入循环中,相当于每次循环都会读取文件中的字符。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马