0

次のプログラムを実行しようとしています。しかし、aNullPointerExceptionが表示されます。これまでのところ、すべてのステップでコードをデバッグしました。numA.add()in mainを実装した後、ヌルポインタ例外が発生するようです。

Main.java

public class Main {

    public static void main(String[]args){

        NumberSystem numA = new NumberSystem(new Number(20),new Number(10));
        numA.add();
        System.out.println(numA.getResult().toString());
    }
}

NumberSystem.java

public class NumberSystem {

    private Number n1,n2,result;

    public NumberSystem(){
        n1 = new Number(0);
        n2 = new Number(0);
        result = new Number(0);
    }

    public NumberSystem(Number n1,Number n2){       
        n1 = new Number();
        n2 = new Number();
        result = new Number(0);
    }   

    public NumberSystem(NumberSystem n){
        n1 = new Number(n.n1);
        n2 = new Number(n.n2);
        result = new Number(n.result);
    }

    public Number getN1(){
        return n1 = new Number(n1.getNum());
    }

    public Number getN2(){
        return n2 = new Number(n2.getNum());
    }

    public Number getResult(){
        return result = new Number(result.getNum());
    }

    public void setN1(int n1Value){
        if (n1Value != 0) n1 = new Number(n1Value);
    }

    public void setN2(int n2Value){
        if (n2Value != 0) n2 = new Number(n2Value);
    }

    public void add(){
        result = new Number(n1.getNum() + n2.getNum());
    }

    public String toString(){
        return "" + n1.getNum();
    }

}

Number.java

public class Number {

    private int num;

    public Number() {num = 0;}
    public Number(int numValue){
        if (numValue != 0) num = numValue;
    }

    public Number(Number anotherNum){
        num = anotherNum.getNum();
    }

    public int getNum(){
        return num;
    }

    public void setNum(int numValue){
        if (numValue != 0) num = numValue;
    }   

    public String toString(){
        return new String("" + num);
    }

}
4

1 に答える 1

3

のコンストラクターでクラス メンバー変数に値を割り当てる必要がありますNumberSystem。現在、これらの値は、渡された同じ名前のローカル値にのみ割り当てています。

public NumberSystem(Number n1,Number n2){       
    n1 = new Number();  // Number assigned to local variable n1
    n2 = new Number();  // ditto for n2
    ...

これにより、NPE次の行に結果を割り当てようとします。

result = new Number(n1.getNum() + n2.getNum());

代わりに、次を使用できます。

this.n1 = new Number();
this.n2 = new Number();

または渡された値を使用します(!?):

this.n1 = n1;
this.n2 = n2;
于 2013-03-18T23:30:26.817 に答える