黑马程序员技术交流社区

标题: 【已解决】关于自定义模拟的LineNumberReader中的行号问题 [打印本页]

作者: 孔德智    时间: 2012-8-28 11:58
标题: 【已解决】关于自定义模拟的LineNumberReader中的行号问题
本帖最后由 孔德智 于 2012-8-28 14:59 编辑

这个是毕老师讲的代码, 我觉得24行的代码 lineNum++;  该放在31行continue;的上面,每次到了下一行正好自增一下, 如果不改的话这样不就是每次读了了一整篇才自增一下的吗?我的理解上是不是哪里有问题,请大家帮下忙!thanks

作者: 王金科    时间: 2012-8-28 12:50
  1. public String myReaderLine() throws IOException  
  2.     {  
  3.         lineNum++;  
  4.         StringBuilder sb=new StringBuilder();  
  5.         int ch=0;  
  6.         while ((ch=r.read())!=-1)  
  7.         {  
  8.             if (ch=='\r')  
  9.             {  
  10.                 continue;  
  11.             }  
  12.             if (ch=='\n')  
  13.             {  
  14.                 return sb.toString();  
  15.             }  
  16.             else  
  17.                sbappend((char)ch);  
  18.         }  
  19.         if(sb.length()!=0)  
  20.             return sb.toString();  
  21.         return null;  
  22.     }  
复制代码
这段代码就是每次读取一行,而不是读取一篇,当主函数调用时,主函数里每读取一行,就需要调用它一次
你把lineNum++; 放在那两个位置都是可以的,只是你还没理解这段代码读取了多少数据
代码里还有两个错误fi应改成r,bu应改成sb

作者: 孔德智    时间: 2012-8-28 13:11
王金科 发表于 2012-8-28 12:50
这段代码就是每次读取一行,而不是读取一篇,当主函数调用时,主函数里每读取一行,就需要调用它一次
你把lineN ...

while ((ch=r.read())!=-1) 这句代码不是要把这个文章读到末尾吗,假如读到一行是怎么跳出循环的?
执行到return sb.toString(); 就是跳出循环吗?
作者: 王金科    时间: 2012-8-28 13:56
孔德智 发表于 2012-8-28 13:11
while ((ch=r.read())!=-1) 这句代码不是要把这个文章读到末尾吗,假如读到一行是怎么跳出循环的?
执行 ...

主函数里  while ((line=myl.myReaderLine())!=null) 就是读一行,这时就会调用while ((ch=r.read())!=-1)读这一行的每一个数据,这一行读到末尾,就结束了,然后返回这一行的数据给主函数
作者: 孔德智    时间: 2012-8-28 14:17
王金科 发表于 2012-8-28 13:56
主函数里  while ((line=myl.myReaderLine())!=null) 就是读一行,这时就会调用while ((ch=r.read())!=-1) ...

谢谢了,懂了
作者: 孔德智    时间: 2012-8-28 14:35
问题已经解决
作者: 王金科    时间: 2012-8-28 14:51
孔德智 发表于 2012-8-28 14:35
问题已经解决

嗯,加油




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