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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 陈中岩 中级黑马   /  2013-4-14 02:26  /  1825 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 陈中岩 于 2013-4-14 08:01 编辑
  1. 根据毕老师视频中自定义输入流部分
  2. 自己做了些改动,无意间发现问题,百思不得其解,问题标在程序中

  3. import java.io.File;
  4. import java.io.FileReader;
  5. import java.io.Reader;

  6. public class Demo {

  7. public static void main(String[] args) throws Exception{
  8. File file = new File("src/Demo.java");
  9. MyReader mr = new MyReader(new FileReader(file));
  10. String len = null;
  11. while ((len = mr.myreadLine()) != null) {
  12. System.out.println(len);
  13. }
  14. }
  15. }
  16. class MyReader {
  17. private Reader r;
  18. private int count;

  19. public MyReader(Reader r) {
  20. this.r = r;
  21. count = 0;
  22. }

  23. public String myreadLine() throws Exception {
  24. StringBuilder sb = new StringBuilder();
  25. ++count;
  26. sb.append(count+": ");//这里只添加了3个数据
  27. int ch = -1;
  28. while ((ch = r.read()) != -1) {
  29. if (ch == '\r') {
  30. continue;
  31. }
  32. else if (ch == '\n') {
  33. return sb.toString();
  34. }
  35. sb.append((char) ch);
  36. }
  37. if (sb.length() > 4) {//这里搞不懂为什么要大于4呢,如果写大于3的话,程序就会一直打印数字和": "
  38. return sb.toString();
  39. }
  40. return null;
  41. }
  42. }
复制代码

点评

建议你把代码加上相应的注释,这样会更清晰些  发表于 2013-4-14 08:00

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

3 个回复

倒序浏览
因为sb的长度为4,如果写大于3,则返回sb.toString(),而不是null,
main方法中:
while ((len = mr.myreadLine()) != null) {
   System.out.println(len);
}
会出现死循环

评分

参与人数 1技术分 +1 收起 理由
黄玉昆 + 1

查看全部评分

回复 使用道具 举报
经过验证,并没有出现你说的问题。我用3没问题。用2就会有问题。
如图:

未命名.jpg (48.95 KB, 下载次数: 18)

未命名.jpg
回复 使用道具 举报
下次我会注意注释格式的。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马