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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 张振纲 中级黑马   /  2012-8-10 17:38  /  1270 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 张振纲 于 2012-8-10 17:40 编辑
  1. /*
  2. 需求:模拟一个LineNumberReader

  3. 思路:创建一个类,并且创建相应的方法
  4.          通过创建一个StringBuilder来作为缓冲区
  5.          添加一个计数器来输出linenumber
  6. */

  7. import java.io.*;

  8. class MyLine
  9. {
  10.         private Reader r;
  11.         private int lineNumber;
  12.         MyLine(Reader r)
  13.         {
  14.                 this.r = r;
  15.         }

  16.         public int getLineNumber()
  17.         {
  18.                 return lineNumber;
  19.         }

  20.         public void setLineNumber(int t)
  21.         {
  22.                 lineNumber=t;
  23.         }

  24.         public String readLine()
  25.         {
  26.                 lineNumber++;
  27.                 int ch;    <FONT color=#ff0000>为什么这里要定义整数常量?</FONT>
  28.                 StringBuilder sb= null;
  29.                 try
  30.                 {
  31.                         sb=new StringBuilder();
  32.                         while ((ch=r.read())!=-1)
  33.                         {
  34.                                 if (ch=='\r')
  35.                                         continue;
  36.                                 if (ch=='\n')
  37.                                         return sb.toString();
  38.                                 else
  39.                                         return sb.append((char)ch);  <FONT color=red>//这里为什么会报错类型不兼容?</FONT>
  40.                         }

  41.                         if (sb.length!=0)
  42.                         {
  43.                                 return sb.toString();
  44.                         }

  45.                         return null;
  46.                         
  47.                 }
  48.                 catch (        IOException e )
  49.                 {
  50.                         throw new RuntimeException("关闭流异常");
  51.                 }
  52.         }
  53. }

  54. class MyLineNumberReader
  55. {
  56.         public static void main(String[] args)
  57.         {
  58.                 FileReader fr = new FileReader("CalendarTest.java");

  59.                 MyLine my = new MyLine(fr);
  60.                 String s = null;
  61.                 while (s = MyLine(fr)!=null)
  62.                 {
  63.                         System.out.print(MyLine());
  64.                 }


  65.                
  66.         }
  67. }

复制代码
写了一个程序错误不少,有很多地方不明白我已经标出来了,
麻烦大家给纠正下......

评分

参与人数 1技术分 +1 收起 理由
张_涛 + 1 赞一个!

查看全部评分

1 个回复

倒序浏览
本帖最后由 张雪磊 于 2012-8-10 18:31 编辑

/*
你这段代码错误不少,下面我用红色标记一下
*/


import java.io.*;

class MyLine
{
        private Reader r;
        private int lineNumber;
        MyLine(Reader r)
        {
                this.r = r;
        }

        public int getLineNumber()
        {
                return lineNumber;
        }

        public void setLineNumber(int t)
        {
                lineNumber=t;
        }

        public String readLine()
        {
                lineNumber++;
                int ch;    <FONT color=#ff0000>为什么这里要定义整数常量?</FONT>
/*
为什么要定义成int型,因为read方法返回的是字符,可以用ASCII码表示,所以用int型接收


*/

                StringBuilder sb= null;
                try
                {
                        sb=new StringBuilder();
                        while ((ch=r.read())!=-1)
                        {
                                if (ch=='\r')
                                        continue;
                                if (ch=='\n')
                                        return sb.toString();
                                else
                                        return sb.append((char)ch);  <FONT color=red>//这里为什么会报错类型不兼容?</FONT>
                                   //你的方法的返回类型是String,所以要把sb转换成String类型,写成sb.append((char)ch) .toString(); 就对了
                        }

                        if (sb.length!=0)//这里应该是length()属性不是length方法
                        {
                                return sb.toString();
                        }

                        return null;

                }
                catch (        IOException e )
                {
                        throw new RuntimeException("关闭流异常");
                }
        }
}

class MyLineNumberReader
{
        public static void main(String[] args)
        {
                FileReader fr = new FileReader("CalendarTest.java");

                MyLine my = new MyLine(fr);
                String s = null;
                while (s = MyLine(fr)!=null)//这里你也写错了,MyLine(fr)这里应该写一个读数据的方法,你写了一个加参数的类名,
                                                          //连new都没new,也就是说连对象都不是。当然是对象也不对。应该是readLine方法
                {
                        System.out.print(MyLine());
                }



        }
}


评分

参与人数 1技术分 +1 收起 理由
张_涛 + 1 赞一个!

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马