我正在尝试运行以下程序。但是,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);
}
}
答案 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;