Java 合并两个数组时出错
我有两个排序数组arr1和arr2,我正在尝试将这两个数组合并到另一个数组“output”中。 但问题是,如果第一个数组耗尽,即数组arr1被完全使用,则“i”的值将大于数组的长度,因此在下一次迭代中,arr[i]会给出一个错误。如何避免这种情况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]) {
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很多人成功了: