Java 合并排序抛出错误

Java 合并排序抛出错误,java,mergesort,Java,Mergesort,我正在编写一个合并排序,得到了一个arrayIndexOutOfBounds异常,我不知道为什么 代码如下: public class MergeSort { private int[] helper; private int[] numbers; private int number; //sort method public MergeSort(int[] values){ this.numbers = values;

我正在编写一个合并排序,得到了一个
arrayIndexOutOfBounds
异常,我不知道为什么

代码如下:

public class MergeSort {

    private int[] helper; 
    private int[] numbers; 

    private int number; 

    //sort method
    public MergeSort(int[] values){
        this.numbers = values; 
        this.number = values.length; 
        this.helper = new int[number]; 
        merge(0, number-1); 
    }

    //mergeSort method
    public void merge(int low, int high){
        if(low<high){
            int mid =(low+high)/2;  
            merge(low, mid); 
            merge(mid+1, high); 
            combine(low, mid, high);  
        }
    }
    //merge method
    public void combine(int low, int mid, int high){
        //copy numbers into helper array;
        for(int ii=0;ii<high;ii++){
            this.helper[ii]=this.numbers[ii]; 
        }
        int ii = low;
        int jj = mid+1;
        int kk = high; 
        while((ii <= mid) && (jj<=high)){

            if(helper[ii] <= helper[jj]){
                    //error is thrown here
                this.numbers[kk] = this.helper[ii];
                ii++; 
            }else{
                this.numbers[kk] = this.helper[jj]; 
                jj++; 
            }
            kk++;
        }
        while(ii<=mid){
            this.numbers[kk]=this.helper[ii]; 
            kk++;
            ii++;
        }

    }
    /**
     * @param args
     */
    public static void main(String[] args) {
        int[] values = new int[]{2,6,1,9,12,64,32,23,12,90,87}; 
        // TODO Auto-generated method stub
        MergeSort ms = new MergeSort(values); 
        System.out.println(Arrays.toString(ms.numbers)); 
    }

}
公共类合并排序{
私人助理;
私有int[]编号;
私有整数;
//排序方法
公共合并排序(int[]值){
这个数字=数值;
this.number=values.length;
this.helper=newint[number];
合并(0,数字1);
}
//合并排序方法
公共无效合并(整数低,整数高){

如果(低几个问题,请尝试以下代码:

public class MergeSort {

    private int[] helper;
    private int[] numbers;

    private int number;

    //sort method
    public MergeSort(int[] values){
        this.numbers = values;
        this.number = values.length;
        this.helper = new int[number];
        merge(0, number-1);
    }

    //mergeSort method
    public void merge(int low, int high){
        if(low<high){
            int mid =(low+high)/2;
            merge(low, mid);
            merge(mid+1, high);
            combine(low, mid, high);
        }
    }
    //merge method
    public void combine(int low, int mid, int high){
        //copy numbers into helper array;
        for(int ii=low;ii<=high;ii++){
            this.helper[ii]=this.numbers[ii];
        }
        int ii = low;
        int jj = mid+1;
        int kk = low;
        while((ii <= mid) && (jj<=high)){
            if(helper[ii] <= helper[jj]){
                this.numbers[kk] = this.helper[ii];
                ii++;
            }else{
                this.numbers[kk] = this.helper[jj];
                jj++;
            }
            kk++;
        }
        while(ii<=mid){
            this.numbers[kk]=this.helper[ii];
            kk++;
            ii++;
        }

    }
    /**
     * @param args
     */
    public static void main(String[] args) {
        int[] values = new int[]{2,6,1,9,12,64,32,23,12,90,87};
        // TODO Auto-generated method stub
        MergeSort ms = new MergeSort(values);
        System.out.println(Arrays.toString(ms.numbers));
    }

}
公共类合并排序{
私人助理;
私有int[]编号;
私有整数;
//排序方法
公共合并排序(int[]值){
这个数字=数值;
this.number=values.length;
this.helper=newint[number];
合并(0,数字1);
}
//合并排序方法
公共无效合并(整数低,整数高){

if(low)有什么不同?我很难弄清楚。循环从
更改为(int ii=0;III如果我使用
iiApologies,你不能做
III-我错过了那条评论。那么,引发异常时的局部变量是什么?
ii=6
并且两个数组都有10个元素注意:错误在下面一行。很抱歉。请参阅更新代码。那么它必须是
kk
。继续
:)