2013-03-18 51 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; 
相關問題