黑马程序员技术交流社区

标题: 晕,不明白 [打印本页]

作者: qmlovewhr    时间: 2013-7-31 20:54
标题: 晕,不明白
本帖最后由 杨兴庭 于 2013-8-1 18:52 编辑

import java.io.*;
public class Test5
{
public static void main(String[] args)throws IOException
{
  // TODO Auto-generated method stub
  FileReader fr=new FileReader("f:\\1.txt");
  char []arr=new char[1024];
  int num=0;
  while((num=fr.read(arr))!=-1)
  {
   System.out.println("hello world");
  }   
  
  fr.close();
}
}
这段程序中,有一个while循环,可是运行的结果,只有一句hello world.这是为什么,不太明白?

作者: 冒烟的芒果    时间: 2013-7-31 21:03
你的1.txt中的内容太少了,一次就读完了。
作者: hx32    时间: 2013-7-31 21:19
只能是楼上的解释了
作者: 无气打火机    时间: 2013-7-31 21:19

  1. import java.io.*;
  2. public class Test5
  3. {
  4. public static void main(String[] args)throws IOException
  5. {
  6.   // TODO Auto-generated method stub
  7.   FileReader fr=new FileReader("f:\\1.txt");
  8.   char []arr=new char[1024];//因为你的文件里面的内容太少了,都不够1024个字符。因为他每次都会在文件中读取1024个字符,你文件中不够1024或者等于1024字符就只能循环一次,如果你把多多的字符存进去在试试就知道打印几次了
  9.   int num=0;
  10.   while((num=fr.read(arr))!=-1)
  11.   {
  12.    System.out.println("hello world");
  13.   }   
  14.   
  15.   fr.close();
  16. }
  17. }
复制代码

作者: qmlovewhr    时间: 2013-7-31 21:20
冒烟的芒果 发表于 2013-7-31 21:03
你的1.txt中的内容太少了,一次就读完了。

如果我打印的是System.out.println(arr);你看下运行结果是怎么样的?你就不会说是一次读完的了

作者: Xiacker    时间: 2013-7-31 21:46
你的while循环里面应该要写这句,System.out.println(new String(arr,0,num)); 才会显示你的1.txt里面的内容吧。你那样写的意思是满足((num=fr.read(arr))!=-1)这个条件,既1.txt里面有东西,然后直接打印 hello world. 没有打印1.txt里面的内容。
作者: 冒烟的芒果    时间: 2013-7-31 22:02
qmlovewhr 发表于 2013-7-31 21:20
如果我打印的是System.out.println(arr);你看下运行结果是怎么样的?你就不会说是一次读完的了
...

那你打印出来看看,我这边用3K的文件测试了,有三个hello world。一次读 1k,不知道你那个1.txt有多大
作者: yangqing    时间: 2013-7-31 22:59
1楼应该是正解
作者: 影响力147753321    时间: 2013-8-1 12:57
本帖最后由 影响力147753321 于 2013-8-1 13:10 编辑

这是一个有条件的循环,打印了说明。第一次判断条件满足,只打印一次说明,第二次条件不满足。也就是说第一次
num=fr.read(arr))!=--1,文件没有读到末尾。第二次num=fr.read(arr))=-1,文件刚好读到末尾。这只是一种巧合。实际就是文件太小,一次读完了。




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