1

我做了一个非常简单的合并排序实现,但我不断收到 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);

    }

}

虽然我知道我得到了使用未初始化对象的异常,但我仍然无法在我的代码中找到错误。这是确切的错误:

在 MainRun.main(MainRun.java:11) 的 MergeSort.(MergeSort.java:14) 处的线程“main”java.lang.NullPointerException 中的合并排序算法异常

我究竟做错了什么?谢谢 :)

4

5 回答 5

5

c未初始化

你可以这样写:

private int[] c = new int[x];

x这将创建一个长度用零填充的数组

于 2013-08-12T11:44:14.600 回答
1

c您需要用所需的长度初始化数组。

private int[] c = new int[length];
于 2013-08-12T11:46:08.953 回答
1

您未能初始化变量c,因此null当您尝试在线访问它时仍然如此:

c[k++] = b[j++];

解决方案是像这样创建一个新数组:

c = new int[x];

x数组的预期大小在哪里。

于 2013-08-12T11:44:23.810 回答
0

你还没有初始化你的c数组,它只是声明:

private int[] c;
于 2013-08-12T11:45:49.450 回答
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);

    }

}
于 2013-08-12T11:53:18.193 回答