为什么在合并两个数组时会出现IndexOutOfBounds错误?

时间:2015-08-12 15:05:46

标签: java arrays indexoutofboundsexception array-merge

我编写了用Java合并两个排序数组的代码。

public class MergeSortedArrays {
    public static int[] my_array     = {3, 4, 6, 10, 11, 15};
    public  static int[] alices_array = {1, 5, 8, 12, 14, 19};
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        int length = my_array.length + alices_array.length;

        int[] new_array = new int[length];
        int i = 0;
        int j = 0;
        int count = 0;

        while (count < length) {

            if(my_array[i] < alices_array[j] ) {
                new_array[count] = my_array[i];
                i++;
            } else {
                new_array[count] = alices_array[j];
                j++;
            }

            count++;
        }
        for(int k=0;k<length;k++) {
            System.out.println(new_array[k]);
        }
    }

}

但是我收到了这个错误 -

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 6
    at MergeSortedArrays.main(MergeSortedArrays.java:15)

在合并完成之前,一个阵列已耗尽。我怎么处理这个案子?

3 个答案:

答案 0 :(得分:1)

如果您已超过my_array[i] < alices_array[j]的结尾,则无法检查是否my_array。因此,请确保i有效;如果不是,请添加j中的元素。同样,如果j超过该阵列的末尾,您也不想查看if(j >= alices_array.length || (i < my_array.length && my_array[i] < alices_array[j] )) { 。因此,请使用此检查而不是之前的if语句:

my_array[i]

它没有尝试评估&&的原因是因为如果前半部分为假,Java不需要评估"window": { "toolbar": false , "width": 800 , "height": 600 , "min_width": 800 , "min_height": 600 } 表达式的后半部分。见Does Java evaluate remaining conditions after boolean result is known?

这个答案将帮助您解决这个问题,但您应该真正阅读本文,以便更好地进行编程:

答案 1 :(得分:1)

问题是,当一个数组完成时,你应该只考虑另一个数组:

while (count < length) {
    if (i == my_array.length) {
        new_array[count] = alices_array[j];
        j++;
    } else if (j == alices_array.length) {
        new_array[count] = my_array[i];
        i++;
    } else {
        if(my_array[i] < alices_array[j] ) {
            new_array[count] = my_array[i];
            i++;
        } else {
            new_array[count] = alices_array[j];
            j++;
        }
    }
    count++;
}

答案 2 :(得分:0)

如果到达目的地,您必须检查ij的范围。

        if (i < my_array.length) {
            if (j < alices_array.length) {
                if (my_array[i] < alices_array[j]) {
                    new_array[count] = my_array[i];
                    i++;
                } else {
                    new_array[count] = alices_array[j];
                    j++;
                }

            } else {
                new_array[count] = my_array[i];
                i++;
            }
        } else {
            if (j < alices_array.length) {
                new_array[count] = alices_array[j];
                i++;
            }
        }