2013-03-18 24 views
0

我试图让下面的程序运行。但是,NullPointerException正在显示。到目前为止,我已经对代码的每一步都进行了调试。看来,空指针异常出现后,我主要实施numA.add()。我将如何解决这个问题?我的程序中出现NullPointerException

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

} 
+8

你必须告诉我们哪一行会引发NPE。 – 2013-03-18 23:24:28

+1

这是一个自定义的类,他发布的源代码。 – arshajii 2013-03-18 23:27:53

回答

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; 
相关问题