调用构造函数时的nullpointer异常

时间:2013-10-30 21:58:26

标签: java

每当我尝试调用任何构造函数

时,我都会收到空指针异常
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());
    }


}

4 个答案:

答案 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();
}