2

每当我尝试调用我的任何构造函数时,我都会不断收到空指针执行

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

4 回答 4

1

仅仅实例化数组本身是不够的。您也必须实例化数组的元素

public Poly(){

    poly = new Pair[count];
    poly[count-1] = new Pair(/*params*/);
    poly[count-1].coeff=0;
    poly[count-1].exponent=0;
    count++;
}
于 2013-10-30T22:02:27.147 回答
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;
于 2013-10-30T22:03:34.633 回答
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++;
}
于 2013-10-30T22:03:05.993 回答
0

您创建一个具有计数元素大小的数组对象。

数组中的每个元素都是空的,所以

poly[count-1].coeff=0; 

将抛出一个 NullPointer。

您将必须在 Poly Sontructor 中创建 Pairs:

for(int i =0;i<count;i++){
    poly[i] = new Pair();
}
于 2013-10-30T22:03:23.040 回答