首页 > 解决方案 > 为什么我需要初始化这个成员数组

问题描述

如果我没有用相同的预期长度初始化这个成员数组 'arryMem',我会得到 nullPointerException 但初始化它可以工作,请帮助我理解这一点。

class BubRec {

    Integer arryMem[] = {0, 0, 0, 0, 0, 0, 0};// if arrMem[]; throws NullPointerException
    int n;


    BubRec(Integer ary[]) {
        for (int i = 0; i <= ary.length - 1; i++) {
            arryMem[i] = ary[i];
        }
        n = arryMem.length;
    }


    Integer[] sortBubRec() {
        int temp = 0;
        if (n >= 0) {
            for (int i = 0; i < (arryMem.length - 1); i++) {
                if (arryMem[i] > arryMem[i + 1]) {
                    temp = arryMem[i];
                    arryMem[i] = arryMem[i + 1];
                    arryMem[i + 1] = temp;
                }
            }
            n--;
            sortBubRec();
        }
        return arryMem;
    }
}

public class BubbleRecMain {

    public static void main(String[] args) {
        Integer arry[] = {34, 56, 78, 1, 2, 4, 7};
        BubRec bubRec = new BubRec(arry);
        Integer sortedArry[] = bubRec.sortBubRec();
        for (int i = 0; i < sortedArry.length; i++) {
            System.out.println(sortedArry[i]);
        }
    }
}

输出:

1 2 4 7 34 56 78

标签: javanullpointerexception

解决方案


因为您必须在尝试填充数组之前指定数组的长度。

您可以通过arryMem = new Integer[ary.length];在 BubRec 构造函数中使用来做到这一点:

class BubRec {

    Integer arryMem[];
    int n;

    BubRec(Integer ary[]) {
        arryMem = new Integer[ary.length];
        for (int i = 0; i <= ary.length - 1; i++) {
            arryMem[i] = ary[i];
        }
        n = arryMem.length;
    }

    // ...

}

推荐阅读