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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 杨银川 黑马帝   /  2011-12-6 17:23  /  2615 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

我想自己编一个LineNumberReader,我想的是加一个计数器不就行了,但是没有叠加,下面是我写的代码,大家帮我看看吧!谢谢
package nineteen;

import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;

public class MyLineNumberReaderDemo {
public static void main(String[] args) {
        FileReader fr ;
        try {
                fr = new FileReader("D:\\test.java");
                MyLineNumberReader mybr=new MyLineNumberReader(fr);
                String len=null;
                try {
                        while((len=mybr.MyLinenumberReadLine())!=null){
                                System.out.println(len);
                        }
                } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                }
                try {
                        mybr.myclose();
                } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                }
        } catch (FileNotFoundException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
        }
}
}
class MyLineNumberReader{
        private FileReader r;
        public MyLineNumberReader(FileReader r){
                this.r=r;
        }
    public String MyLinenumberReadLine() throws IOException{
            StringBuilder sb=new StringBuilder();
            int ch=0;
            int num=1;                              //定义一个计数器
            while((ch=r.read())!=-1){
                    if(ch=='\r'){
                            continue;
                    }
                    if(ch=='\n'){
                            int temp=num++;                       
                            return temp+sb.toString();
                    }
                    else{
                            sb.append((char)ch);
                    }
            }
            return null;
     }
    public void myclose() throws IOException{
            r.close();      
    }
}

5 个回复

倒序浏览
  1. package nineteen;

  2. import java.io.FileNotFoundException;
  3. import java.io.FileReader;
  4. import java.io.IOException;

  5. public class MyLineNumberReaderDemo {
  6. public static void main(String[] args) {
  7.         FileReader fr ;
  8.         try {
  9.                 fr = new FileReader("D:\\test.java");
  10.                 MyLineNumberReader mybr=new MyLineNumberReader(fr);
  11.                 String len=null;
  12.                 try {
  13.                         while((len=mybr.MyLinenumberReadLine())!=null){
  14.                                 System.out.println(len);
  15.                         }
  16.                 } catch (IOException e) {
  17.                         // TODO Auto-generated catch block
  18.                         e.printStackTrace();
  19.                 }
  20.                 try {
  21.                         mybr.myclose();
  22.                 } catch (IOException e) {
  23.                         // TODO Auto-generated catch block
  24.                         e.printStackTrace();
  25.                 }
  26.         } catch (FileNotFoundException e) {
  27.                 // TODO Auto-generated catch block
  28.                 e.printStackTrace();
  29.         }
  30. }
  31. }
  32. class MyLineNumberReader{
  33.         private FileReader r;
  34.         public MyLineNumberReader(FileReader r){
  35.                 this.r=r;
  36.         }
  37.     public String MyLinenumberReadLine() throws IOException{
  38.             StringBuilder sb=new StringBuilder();
  39.             int ch=0;
  40.             int num=1;                              //定义一个计数器
  41.             while((ch=r.read())!=-1){
  42.                     if(ch=='\r'){
  43.                             continue;
  44.                     }
  45.                     if(ch=='\n'){
  46.                             num = num++;                       
  47.                             return num+sb.toString();
  48.                     }
  49.                     else{
  50.                             sb.append((char)ch);
  51.                     }
  52.             }
  53.             return null;
  54.      }
  55.     public void myclose() throws IOException{
  56.             r.close();      
  57.     }
  58. }
复制代码
这样就可以了    你的是因为 num虽然每次都++;但是并没有赋予原来的值
所以每次循环 num的值都没有变,都是1,然后再次循环,所以每次行号都是1
回复 使用道具 举报
  1. package nineteen;

  2. import java.io.FileNotFoundException;
  3. import java.io.FileReader;
  4. import java.io.IOException;

  5. public class MyLineNumberReaderDemo {
  6. public static void main(String[] args) {
  7.         FileReader fr ;
  8.         try {
  9.                 fr = new FileReader("D:\\test.java");
  10.                 MyLineNumberReader mybr=new MyLineNumberReader(fr);
  11.                 String len=null;
  12.                 try {
  13.                         while((len=mybr.MyLinenumberReadLine())!=null){
  14.                                 System.out.println(len);
  15.                         }
  16.                 } catch (IOException e) {
  17.                         // TODO Auto-generated catch block
  18.                         e.printStackTrace();
  19.                 }
  20.                 try {
  21.                         mybr.myclose();
  22.                 } catch (IOException e) {
  23.                         // TODO Auto-generated catch block
  24.                         e.printStackTrace();
  25.                 }
  26.         } catch (FileNotFoundException e) {
  27.                 // TODO Auto-generated catch block
  28.                 e.printStackTrace();
  29.         }
  30. }
  31. }
  32. class MyLineNumberReader{
  33.         private FileReader r;
  34.         public MyLineNumberReader(FileReader r){
  35.                 this.r=r;
  36.         }
  37.     public String MyLinenumberReadLine() throws IOException{
  38.             StringBuilder sb=new StringBuilder();
  39.             int ch=0;
  40.             int num=0;                              //定义一个计数器
  41.             while((ch=r.read())!=-1){
  42.                     if(ch=='\r'){
  43.                             continue;
  44.                     }
  45.                     if(ch=='\n'){
  46.                             num = num++;                       
  47.                             return num+sb.toString();
  48.                     }
  49.                     else{
  50.                             sb.append((char)ch);
  51.                     }
  52.             }
  53.             return null;
  54.      }
  55.     public void myclose() throws IOException{
  56.             r.close();      
  57.     }
  58. }
复制代码
上次那个代码不对   会导致从2开始

评分

参与人数 1技术分 +1 收起 理由
王德云 + 1

查看全部评分

回复 使用道具 举报
wsssx 2011-12-6 18:14:45
板凳
提示: 作者被禁止或删除 内容自动屏蔽
回复 使用道具 举报
错了   也不对  汗  
回复 使用道具 举报
wsssx 发表于 2011-12-6 18:14
为什么还要num = num++; 这样哪?直接 num++;或者num+=1;不可以吗?

我以为是这里的错
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马