如果我不以相同的预期长度初始化这个成员数组'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
因为在尝试填充数组之前,您必须指定数组的长度。
您可以通过在 BubRec 构造函数中使用 arryMem = new Integer[ary.length];
来做到这一点:
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;
}
// ...
}
当你编写Integer arryMem [] = {0,0,0,0,0,0,0};
时,java 会分配一个长度为 7 的数组,因为你插入了 7 个元素。或者,您可以通过键入 Integer arryMem [] = new Integer [7]
来分配相同长度的数组。如果直接插入值,Java 会自动为您执行此操作。
你现在的问题是,当你输入Integer arrayMem [];
时,没有人分配任何内存下层java,因为你没有插入任何值,也没有插入你。因此,如果您调用此数组中的元素,则会得到一个 NullPointerException,因为没有任何元素...
因此,必须先分配内存(创建对象(,然后才能使用它。您可以通过多种方式完成此操作。您可以执行此操作并通过键入一个步骤初始化所有元素...
this.arryMem = Arrays.copyOf(ary, ary.length);
。在您的构造函数中。