-4
Exception in thread "main" java.lang.NullPointerException
    at Library.loadBooks(Library.java:179)
    at UseLibrary.main(UseLibrary.java:105)

このエラーは私を夢中にさせます!

public void loadBooks(String s) throws IOException{
    String str[] = new String[6];
    String inFName = ".//" + s ;
    BufferedReader input = new BufferedReader(new FileReader(inFName));
    int x;
    double y;
    String line = "";
    while(line != null){

        for(int i=0; i<6; i++){
            str[i] = new String();
            line = input.readLine();
            str = line.split("[-]");
            x = Integer.parseInt(str[1]);
            y = Double.parseDouble(str[2]);
            Book a = new Book(str[0], x, y, str[3], str[4], str[5]);
            add(a);
        } 

    }
}

このコードの問題点は何ですか?

配列を初期化しましたが、実行されませんでした!

更新 1

save.txt私が持っているのは

1 Don Knuth-290-23.45-The Art of Programming with Java-HG456-Engineering-5 
2 A. Camp-400-13.45-An Open Life-HSA234-Philosophy-1 
3 James Jones-140-12.11-Oh, Java Yeah!-SDF213-Science Fiction-2 
4 J. Campbell-250-32.45-An Open Life-JH45-Science-3 
5 Mary Kennedy-230-56.32-Intro to CS Using Java as the Language-USN123-Science-4
4

4 に答える 4

0

問題は、次の 2 行のコードにあります。

line = input.readLine();
str = line.split("[-]");

まず、ファイルから行を読み取ります。ファイルには少なくとも 6 行あると仮定しましたが、これは明らかに間違った仮定です。ストリームの終わりに達した場合にBufferedReader#readLine戻ります。nullかどうかをチェックせず、NPE を引き起こす null オブジェクトを呼び出します。null linesplit

于 2012-06-17T19:39:10.057 に答える
0

どの行で Exception がスローされたかを理解するのは難しいですが、次のように推測します。

x = Integer.parseInt(str[1]);
y = Double.parseDouble(str[2]);

解析する前に、str[1]と が でstr[2]はないことを確認してくださいnull

于 2012-06-17T19:37:12.413 に答える
0

私が思う問題は

saved.txt行のデータがないため、6 回目の反復の for ループのために、5 行以下の行があり、 を取得してNullPointerExceptionいます。

以下の手順に従って、何が得られるか教えてください...

それ以外の

while(line != null){

    for(int i=0; i<6; i++){
        str[i] = new String();
        line = input.readLine();
        str = line.split("[-]");
        x = Integer.parseInt(str[1]);
        y = Double.parseDouble(str[2]);
        Book a = new Book(str[0], x, y, str[3], str[4], str[5]);
        add(a);
    } 

}

使用する

while ((line = input.readLine()) != null) {
        str = line.split("[-]");
        Book a = new Book(str[0], Integer.parseInt(str[1]), Double.parseDouble(str[2]), str[3], str[4], str[5]);
        add(a);
}

それでも問題が発生する場合はお知らせください。

更新 1

あなたの更新ごとに、

save.txt私が持っているのは

1 Don Knuth-290-23.45-The Art of Programming with Java-HG456-Engineering-5 
2 A. Camp-400-13.45-An Open Life-HSA234-Philosophy-1 
3 James Jones-140-12.11-Oh, Java Yeah!-SDF213-Science Fiction-2 
4 J. Campbell-250-32.45-An Open Life-JH45-Science-3 
5 Mary Kennedy-230-56.32-Intro to CS Using Java as the Language-USN123-Science-4

ご覧のとおり、ファイルには 5 行あり、6 回目の反復ではNullPointerException.

また、Java でファイルの内容を印刷する方法もお読みください。

于 2012-06-17T19:38:05.953 に答える
0

whileがnullかどうかをチェックするループlineがありますが、whileループが実行されるわけではありませんが、 , を6回呼び出しline = input.readLine();、それがnullかどうかを決してチェックしないforループがあります。ファイルの終わりに達したため、ある時点で、lineおそらく null です。for ループ内で nullかどうかを確認するかline、ループを別の方法で処理する必要があります。

于 2012-06-17T19:39:01.663 に答える