-3

私のコードにはこの問題があります。java.lang.nullpointerexception と呼ばれます。そして、私はそれを修正することはできません。私がそれを見るのを手伝ってください。ありがとうございました。クラス名とインポートを含めませんでした。クラス名はCHORDと呼ばれます。私の担当者はグローバル変数を使用しないと言っているので、パブリックを静的にしませんでした。

private ArrayList<Integer> nodeList;

public static void main(String[] args){


    CHORD obj = new CHORD();
    obj.nodeList = new ArrayList<Integer>();

    String filename ="";

    if(args.length ==1){
    filename = args[0];
    obj.read(filename);
    }

}

public void read(String file){
    CHORD obj = new CHORD();
    obj = null;

    Scanner loadFile = null;
    try{
    loadFile = new Scanner(new File(file));
    String inputLine;

    while(loadFile.hasNextLine()){
        inputLine = loadFile.nextLine();

        String[] inputArray = inputLine.split(" ",3);

        if(inputArray[0].equalsIgnoreCase("init")){

            int size = Integer.parseInt(inputArray[1]);
            setSizeFT(init(size));  
        }
        else if(inputArray[0].equalsIgnoreCase("addpeer")){
            System.out.println("adding");
            nodeList.add(Integer.parseInt(inputArray[1]));

        }
    }
    }
    catch(FileNotFoundException x){

    }
    finally{
        System.out.println(getFT());
        loadFile.close();
    }
    System.out.println(getFT());
}

public void print(){
    CHORD obj = new CHORD();
    for(int x =0; x< obj.nodeList.size(); x++){
        System.out.println(obj.nodeList.get(x));
    }
}


public int init(int num){
    int n = 23;
    double k = Math.ceil(Math.log(n)/Math.log(2));
    int size = (int)k;
    return size;
}

public void setSizeFT(int size){
    sizeFT = size;
}

public int getFT(){
    return sizeFT;
}

}

4

1 に答える 1

4

NullPointerException とは何かについての説明は次のとおりです: http://antwerkz.com/dealing-with-nullpointerexceptions/ 記事から:

最も一般的な (経験豊富な開発者にとって明らかな) 原因は、変数を初期化していないことです。

obj.nodeListその行を見ると、 nullのように見えます。これが私がそれを推測した方法です:

  1. obj最初の行がCHORD obj = new CHORD();. つまりobj、null に設定していません。
  2. Integernull ではないことがわかります。それはクラスであり、静的メソッドを呼び出しています。そこには何も割り当てられないため、null にすることはできません。
  3. inputArray[1] null を返す可能性がありますが、それが発生した場合、スタック トレースはこの行で終了せず、おそらく 内のどこかの行で終了しInteger.parseIntます。ただし、完全なスタック トレースを確認する必要があります。しかし、 Integer.parseInt の javadoc を見ると、NPE をスローするとは言っていないので、それを除外するさらに多くの証拠です。
  4. null の場合inputArray、おそらく最初の if ステートメントでエラーが発生するため、除外できます。

どこかであなたのコードはobj.nodeList = new NodeList()何かをする必要があります。CHORD クラスがどのようなものかを見ないと、はっきりとは言えません。

于 2013-02-09T06:57:35.477 に答える