1

私は Java を初めて使用し、頭を悩ませているエラーが発生しています...エラーは次のとおりです。

Exception in thread "main" java.lang.NullPointerException
    at BancA.carica(BancA.java:30)
    at BancA.main(BancA.java:46)

txt ファイルからいくつかの値をロードする必要があります...これは ID (Cliente1 など)、番号の最初のリスト (支払い) と 2 番目のリスト (送金) で構成されています...これら 2 つを区別することにしました「-」でそれらを分割するカテゴリ...しかし、 readLine() は間違った行を読み取るか、「while」ステートメントを無視しているようです...とにかく、これは私のコードです。あなたの助けに感謝します:-)

import java.io.*;
import java.util.*;
import java.lang.*;

public class BancA{
    private static final String CLIENTI = ("Clienti.txt");
    private static ArrayList <Conto> conto = new ArrayList <Conto>();
    public static void carica(){
        BufferedReader bc;
        Conto co = new Conto();
        String tmp, tmp1, tmp2;
        try{
            bc = new BufferedReader(new FileReader(CLIENTI));
            tmp = bc.readLine();
            while(tmp!=null){
            co.setId(tmp);
            tmp1 = bc.readLine();
            while(!(tmp1.equals("-"))){
                co.setBonifico(Integer.parseInt(tmp1));
                tmp1 = bc.readLine();
            }
            tmp2 = bc.readLine();
            while(!(tmp2.equals("-"))){
                co.setVersamento(Integer.parseInt(tmp2));
                tmp2 = bc.readLine();
            }
                conto.add(co);
                co = new Conto();
                tmp = bc.readLine();
            }
            System.out.println(conto);
        }
        catch(IOException e){
            e.printStackTrace();
        }
    }
public static void main(String [] args){
    carica();
}
}

これは他のクラスです:

import java.util.*;
public class Conto{
public String id;
public LinkedList <Integer> bonifico = new LinkedList <Integer>();
public LinkedList <Integer> versamento = new LinkedList <Integer>();
public Conto(){
}
public void setId(String i){
    id = i;
}
public void setBonifico(int b){
    bonifico.add(b);
}
public void setVersamento(int v){
    versamento.add(v);
}
public String getId(){
    return id;
}
public LinkedList <Integer> getBonifico(){
    return bonifico;
}
public LinkedList <Integer> getVersamento(){
    return versamento;
}
public String toString(){
    String str = ("\nId: " +id+ "\nBonifico: " +bonifico+ "\nVersamento:+versamento);
    return str;
}
 }

これは私のClienti.txtファイルですが:

 Cliente1
 1
 2
 3
 -
 41
 52
 33
 90
 -
 Cliente2
 4
 -
 89
 3
 1
4

3 に答える 3

1

2番目readline()はEOFに遭遇するtmp2可能性がありnull、この状況にある可能性があり、NullPointerException.

に変更while(!(tmp2.equals("-")))するとwhile (tmp2 != null && !tmp2.equals("-"))、問題が解決します。

于 2013-05-29T14:44:35.133 に答える
0

ファイルが見つからないようです。あなたのファイルは本当に .jar/.class ファイルと同じディレクトリにありますか?

文字列ではなく、File-object を FileReader に渡す必要があります。呼び出して正しいパスを選択したかどうかを確認できます

myFile.exists();

(-> true を返す必要があります)

于 2013-05-29T14:34:21.010 に答える
0

EOF に達しました - NULL

EOF にチェックを入れる必要があります。現在、ファイルの最後にいて、そこに「-」が表示されることを期待しているため、NullPointerException をスローしています。while ループは何をすべきかわからず、適切に終了できません。

while ループには、「-」または EOF を示す OR 条件が必要です。EOFに達したかどうかを確認する「if」句も。もしそうなら、続けてください。

編集: Siyu Song のコメントを見たところ、彼は正しいです。while (tmp2 != null && !tmp2.equals("-"))動作します。私は今それを試してみましたが、それは魅力のように機能しました.

于 2013-05-29T15:03:31.210 に答える