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