合并排序代码抛出NullPointerException

时间:2013-08-12 11:41:46

标签: java arrays nullpointerexception mergesort

我做了一个非常简单的合并排序实现,但我继续得到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)​​

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

5 个答案:

答案 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);

    }

}