2013-03-18 3 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. –

+1

Это особый класс, источник которого он разместил. – arshajii

ответ

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; 
Смежные вопросы