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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 盛亚昆 中级黑马   /  2012-3-23 18:08  /  1407 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

import java.io.*;
class MyBufferReader

{
        //要使用
        private FileReader r;//这是什么意思啊
        MyBufferedReader( FileReader r)//这个构造函数什么意思啊
        {
                this.r=r;
       
        }

//可以一次读一行数据的方法
        public String myReadLine()throws IOException
        {
                //定义一个容器,原BufferReader封装的是字符数组,
                StringBuilder sb=new StringBuilder();

                int ch=0;
                while ((ch=r.read())!=-1)
                {
                        if (ch=='\r')
                            continue;
                        if (ch=='\n')
                                return sb.toString();
                        else
                                sb.append((char)ch);
                       
                }
       

                if(sb.lengeh()!=0)
                        return sb.toString();//这是什么意思啊
                return null;
        }

        public void myClose()throws IOException
        {
                r.close();
       
        }
}

class  MyBufferReaderDemo
{
        public static void main(String[] args) throws IOException
        {
                FileReader fr=new FileReader("buf.txt");
                MyBufferedReader mybr=new MyBufferedReader(fr);

                        String line=null;

                        while ((line=mybr.readLine())!=null)
                        {
                                System.out.println(line);

                        }

                                mybr.myClose();
       
        }


       
}
怎么出现错误了呢?

MyBufferReader.java:17: 方法声明无效;需要返回类型
        MyBufferedReader( FileReader r)
        ^

4 个回复

倒序浏览
你的程序是在模拟BufferReader(reader),这是一个装饰类,必须传入一个字符流,所以要定义一个有参构造函数,传入一个流,毕老师用的是StringBuilder,其是和用数组实现差不多,因为是模拟,所以用哪一个随意,只要能实现功能就行;
构造函数名必须和类名相同,你的类是MyBufferReader,而构造函数是MyBufferedReader(),多了两个字母‘er’,所以会报错。

评分

参与人数 1技术分 +1 收起 理由
房宝彬 + 1

查看全部评分

回复 使用道具 举报
import java.io.*;
class MyBufferReader

{
        //要使用
        private FileReader r;//这是什么意思啊(声明一个私有变量FileReader 别名为r)
        MyBufferedReader( FileReader r)//这个构造函数什么意思啊(构造函数是此对象被new(实例化)时,调用的方法)
        {
                this.r=r;
        
        }

//可以一次读一行数据的方法
        public String myReadLine()throws IOException
        {
                //定义一个容器,原BufferReader封装的是字符数组,
                StringBuilder sb=new StringBuilder();

                int ch=0;
                while ((ch=r.read())!=-1)
                {
                        if (ch=='\r')
                            continue;
                        if (ch=='\n')
                                return sb.toString();
                        else
                                sb.append((char)ch);
                        
                }
        

                if(sb.lengeh()!=0)
                        return sb.toString();//这是什么意思啊(把前面定义的StringBuilder中已经存在的数据转换为字符串返回出去)
                return null;
        }

        public void myClose()throws IOException
        {
                r.close();
        
        }
}

class  MyBufferReaderDemo
{
        public static void main(String[] args) throws IOException
        {
                FileReader fr=new FileReader("buf.txt");
                MyBufferedReader mybr=new MyBufferedReader(fr);

                        String line=null;

                        while ((line=mybr.readLine())!=null)
                        {
                                System.out.println(line);

                        }

                                mybr.myClose();
        
        }


        
}
怎么出现错误了呢?

MyBufferReader.java:17: 方法声明无效;需要返回类型
        MyBufferedReader( FileReader r)
回复 使用道具 举报
上面的构造函数名和你的类名不一致,导致出现了问题。。

评分

参与人数 1技术分 +1 收起 理由
房宝彬 + 1

查看全部评分

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