我做了一个非常简单的合并排序实现,但我继续得到java.lang.NullPointerException。这是我的代码:
public class MergeSort {
private int[] c;
private int i = 0, j = 0, k = 0;
public MergeSort(int[] a, int[] b){
while( i < a.length && j < b.length){
if(a[i] > b[j])
c[k++] = b[j++];
else
c[k++] = a[i++];
}
while(i < a.length){
c[k++] = a[i++];
}
while(j < b.length){
c[k++] = b[j++];
}
i = 0;
while(i < c.length){
System.out.print(c[i++] + " ");
}
}
}
我正在调用主类中的构造函数:
public class MainRun {
public static void main(String[] args) {
System.out.println("Merge Sort Algorithm");
int a[] = {1, 3, 5, 7, 9};
int b[] = {2, 6, 7, 9, 11};
new MergeSort(a, b);
}
}
虽然我知道我使用未初始化的对象时遇到异常,但仍然无法在我的代码中找到错误。这是确切的错误:
线程“main”中的合并排序算法异常 MergeSort中的java.lang.NullPointerException。(MergeSort.java:14) 在MainRun.main(MainRun.java:11)
我做错了什么?谢谢:))
答案 0 :(得分:5)
c
未初始化
你这样写:
private int[] c = new int[x];
这将创建一个长度为x
的数组,其中填充零
答案 1 :(得分:1)
您未能将变量c
初始化,因此当您尝试在线路上访问变量时它仍为null
:
c[k++] = b[j++];
解决方案是创建一个新的数组:
c = new int[x];
其中x
是数组的预期大小。
答案 2 :(得分:1)
您需要使用所需长度初始化数组c
。
private int[] c = new int[length];
答案 3 :(得分:0)
您尚未初始化您的c
数组,它的唯一声明:
private int[] c;
答案 4 :(得分:0)
只需初始化c
:
public class MergeSort {
private int[] c;
private int i = 0, j = 0, k = 0;
public MergeSort(int[] a, int[] b){
c = new int[a.length]; // <- this is what you need
while( i < a.length && j < b.length){
if(a[i] > b[j])
c[k++] = b[j++];
else
c[k++] = a[i++];
}
while(i < a.length){
c[k++] = a[i++];
}
while(j < b.length){
c[k++] = b[j++];
}
i = 0;
while(i < c.length){
System.out.print(c[i++] + " ");
}
}
}
public class MainRun {
public static void main(String[] args) {
System.out.println("Merge Sort Algorithm");
int a[] = {1, 3, 5, 7, 9};
int b[] = {2, 6, 7, 9, 11};
new MergeSort(a, b);
}
}