我正在尝试将一个带循环的数组复制到另一个数组中。
所以我想要一半的数组用于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];
}
答案 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
设置为该值。
答案 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-这是要复制的数组元素的数量。