-1

嘿,我想在 java 中做一些练习,通过读取一个充满数字的 .txt 文件,然后创建一个从最大到最小的数字。

为了做到这一点,我做了一些课程。这是我的代码:

import java.io.*;
import java.util.LinkedList;

public class Texto {

    String fileName;

    public Texto(String nombreArchivo) {
        this.fileName = nombreArchivo;                  
    }

    public LinkedList storeArray() {
        LinkedList list = new LinkedList();
        int a=0;
        try {
            FileReader file = new FileReader(fileName);
            BufferedReader buffer = new BufferedReader(file);
            String temp="";
            while (temp!=null) {
                list.add(buffer.readLine());
                temp=list.get(a).toString(); // line 25
                a++;                
            }
            list.remove(a);
        } catch (IOException e) {
            e.getMessage();
        }
        return list;
    }

    public int getLength() {
        return storeArray().size(); // line 41
    }

    public void orderFile() {
        try {
            FileWriter file = new FileWriter("archivoOrdenado.txt");
            BufferedWriter buffer = new BufferedWriter(file);
            PrintWriter print = new PrintWriter(buffer);
            int array[] = new int[getLength()]; // line 52

            for (int i=0;i<getLength();i++) {
                array[i]=(Integer)storeArray().get(i);
            }

            int temp;

            for (int i=0;i<getLength();i++) {
                for (int j=1;i<getLength();j++) {
                    if (array[i]<array[j]) {
                        temp=array[i];
                        array[i]=array[j];
                        array[j]=temp;
                    }
                }
            }

            for (int i=0;i<getLength();i++) {
                print.println(array[i]);
            }
            print.close();
            buffer.close();

        } catch (IOException e) {
            e.getMessage();
        }

    }
}

在另一个类中,y 像这样调用这个方法:

public class Main {
    public static void main(String[] args) {
        Texto t = new Texto("numeros.txt");
        t.orderFile();
    }
}

运行错误说:

Exception in thread "main" java.lang.NullPointerException
    at Texto.storeArray(Texto.java:25)
    at Texto.getLength(Texto.java:41)
    at Texto.orderFile(Texto.java:52)
    at Main.main(Main.java:6)

这是第 25 行:temp=list.get(a).toString();
41: return storeArray().size();
52:int array[] = new int[getLength()];

4

1 回答 1

2

关注评论:

    String temp="";
    while (temp!=null)
    {
        list.add(buffer.readLine()); // buffer.readLine() will return null at EOF
                                     // but that isn't tested here
        temp=list.get(a).toString(); // so at EOF you .toString() null - NPE.
        a++;                
    }

把它改写成这样

    String temp="";
    while (temp!=null) {
        temp=buffer.readLine();
        if (temp != null) {
            list.add(temp);
        }
    }

然后list.remove(a);在循环结束之后也可以删除,因为它只是为了纠正你以 null 结束的事实。

编辑:只有 1 个比较的版本,更紧凑但可能不太可读

    String temp="";
    while ((temp = buffer.readLine()) != null) {
         list.add(temp);
    } 
于 2013-07-24T00:33:06.287 回答