Java 合并两个数组时出错

Java 合并两个数组时出错,java,mergesort,Java,Mergesort,我有两个排序数组arr1和arr2,我正在尝试将这两个数组合并到另一个数组“output”中。 但问题是,如果第一个数组耗尽,即数组arr1被完全使用,则“i”的值将大于数组的长度,因此在下一次迭代中,arr[i]会给出一个错误。如何避免这种情况 int i=0; int j=0; for(int k=0;k<output.length;k++) { if(arr1[i]<arr2[j]) {

我有两个排序数组arr1和arr2,我正在尝试将这两个数组合并到另一个数组“output”中。 但问题是,如果第一个数组耗尽,即数组arr1被完全使用,则“i”的值将大于数组的长度,因此在下一次迭代中,arr[i]会给出一个错误。如何避免这种情况

    int i=0;
    int j=0;

    for(int k=0;k<output.length;k++) {      

            if(arr1[i]<arr2[j]) {
                output[k]=arr1[i];
                i++;
            }


            else{           
                   output[k]=arr2[j];
                   j++;         
            }       

    }

您需要检查阵列是否已耗尽:

int i=0;
int j=0;

for(int k=0;k<output.length;k++) {      
    if(i < arr1.length && j < arr2.length) { 
        // both arrays still have unused elements
        if (arr1[i]<arr2[j]) {
            output[k]=arr1[i];
            i++;
        } else {           
           output[k]=arr2[j];
           j++;         
        } 
    } else if (i < arr1.length) {
        // only the first array has unused elements
        output[k]=arr1[i];
        i++;   
    } else if (j < arr2.length) {
        // only the second array has unused elements
        output[k]=arr2[j];
        j++; 
    } 
}

我们可以利用这样一个事实,即不必检查k的值,因为输出数组的长度等于arr1和arr2的长度之和。一旦任一数组的元素耗尽,我们将退出主for循环,因此条件i
int i=0;
int j=0;

for(int k=0;i<arr1.length && j < arr2.length ;k++) {      

        if(arr1[i]<arr2[j]) {
            output[k]=arr1[i];
            i++;
        }


        else{           
               output[k]=arr2[j];
               j++;         
        }       

}
if(i != arr1.length){
    for(; i < arr1.length; i++,k++)
    output[k]=arr1[i];
}
else{
    for(; j < arr2.length; j++,k++)
    output[k]=arr2[j];
}

验证两个数组的长度。仅当值存在时才使用该值。如果arr1.length>i…更改您的第一个if条件如下:ifarr1.length>i&&arr1[i]Thanx很多人成功了: