将一半阵列复制到新阵列中

时间:2020-06-27 12:59:29

标签: java arrays algorithm loops

我正在尝试将一个带循环的数组复制到另一个数组中。
所以我想要一半的数组用于A1,另一半用于A0。用于递归算法。
问题是,该副本不起作用
现在看起来像这样:

    A1 = new int[A.length / 2];
    A0 = new int[A.length - A1.length];

    for (int i = 0; i <= A.length / 2; i++) {
    A1 [i] = A [i];
    }

2 个答案:

答案 0 :(得分:2)

使用安迪·特纳(Andy Turner)建议的Arrays.copyOfRange(),这很轻松:

        int[] a = { 2, 3, 5, 7, 11 };
        
        int[] a1 = Arrays.copyOfRange(a, 0, a.length / 2);
        int[] a0 = Arrays.copyOfRange(a, a.length / 2, a.length);
        
        System.out.println("a1: " + Arrays.toString(a1));
        System.out.println("a0: " + Arrays.toString(a0));

输出:

a1: [2, 3]
a0: [5, 7, 11]

您的代码出了什么问题?

WJS提供了线索:通过在条件<=中使用i <= A.length / 2,您试图将其复制到A1的不存在元素中。这给您一个ArrayIndexOutOfBoundsException。当A1的长度为A.length / 2时,其元素的索引为0、1…直至A.length / 2 - 1包括在内。没有元素A.length / 2,但是您的循环将在最后一次运行且将i设置为该值。

文档链接

Arrays.copyOfRange()

答案 1 :(得分:1)

尝试一下:

int[] A = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
    int[] A0 = new int[A.length / 2];
    int[] A1 = new int[A.length - A0.length];

    int i, j = 0;
    for (i = 0; i < A.length; i++) {
        if (i < A.length / 2)
            A0[i] = A[i];
        else {
            A1[j++] = A[i];
        }
    }

或更简单

int[] A = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
    int[] A0 = new int[A.length / 2];
    int[] A1 = new int[A.length - A0.length];

    System.arraycopy(A,0,A0,0,A.length/2);
    System.arraycopy(A,A.length/2,A1,0,A1.length);

arraycopy(对象源,int srcPos,Object dest,int destPos,int长度)

source-这是源数组。

srcPos-这是源数组中的起始位置。

目的地-这是目标数组。

destPos-这是目标数据中的起始位置。

length-这是要复制的数组元素的数量。

相关问题