-1

数字で満たされた.txtファイルを読み込んでから、最大から最小までの数字でファイルを作成することで、Javaでいくつかの練習をしたかったのです。

そのために、いくつかのクラスを作成しました。これは私のコードです:

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:41:52 行temp=list.get(a).toString();
return storeArray().size();
です。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 に答える