每当我尝试调用任何构造函数
时,我都会收到空指针异常public class Poly{
private static class Pair{
int coeff;
int exponent;
}
int count=1;
private Pair[] poly =new Pair[count];
public Poly(){
poly = new Pair[count];
poly[count-1].coeff=0;
poly[count-1].exponent=0;
count++;
}
public Poly(int coeff1, int exp){
poly = new Pair[count];
//poly.add(new Poly(coeff1, exp));
poly[count-1].coeff=coeff1;
poly[count-1].exponent=exp;
count++;
}
private Poly (int exp) {
poly = new Pair[exp+1];
poly[0].exponent = exp;
}
public String toString(){
String str ="";
for(int i=0; i<=count; i++){
str+= poly[i].coeff +"x^" +poly[i].exponent;
}
return str;
}
public static void main(String[] args) {
Poly p =new Poly(5, 3);
System.out.println(p.toString());
}
}
答案 0 :(得分:1)
仅仅实例化数组本身是不够的。您还必须实例化数组的元素
public Poly(){
poly = new Pair[count];
poly[count-1] = new Pair(/*params*/);
poly[count-1].coeff=0;
poly[count-1].exponent=0;
count++;
}
答案 1 :(得分:1)
此代码:
poly = new Pair[count];
永远不会调用构造函数,所以下一行
poly[count-1].coeff=0;
......因NPE而失败。
所有第一行都是创建一个null
个引用数组,你还没有创建任何Pair
个对象。要实际创建Pair
对象,您必须这样做:
poly = new Pair[count]; // Not calling the constructor
for (int i = 0; i < poly.length; ++i) {
poly[i] = new Pair(/*...args...*/); // Calling the constructor
}
poly[count-1].coeff=0;
答案 2 :(得分:0)
当你创建一个新的对象数组时,它们默认为null
Pair poly = new Pair[10];
poly[0] == null // true
poly[9] == null // true
您需要初始化数组
public Poly(){
poly = new Pair[count];
for(int i=0;i<count;i++)
poly[i] = new Pair();
poly[count-1].coeff=0;
poly[count-1].exponent=0;
count++;
}
答案 3 :(得分:0)
您可以使用count个元素的大小创建一个数组对象。
数组中的每个元素都是null,所以
poly[count-1].coeff=0;
将提供一个NullPointer。
您必须在Poly Poly sontructor中创建Pairs:
for(int i =0;i<count;i++){
poly[i] = new Pair();
}