我的程序中有NullPointerException

时间:2013-03-18 23:22:27

标签: java nullpointerexception

我正在尝试运行以下程序。但是,NullPointerException正在显示。到目前为止,我已经在每一步调试我的代码。似乎在我在main中实现numA.add()之后出现了空指针异常。

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);
    }

}

1 个答案:

答案 0 :(得分: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;