尝试将SMALLER数组复制到LARGER数组中

时间:2013-02-02 03:58:48

标签: java arrays for-loop indexoutofboundsexception

这让我感到疯狂,在一个我应该在大规模任务中取得大量进展的夜晚。这样一个看似基本的问题让我感到非常尴尬,但我放弃了。我试过画一幅画,我已经尝试过我所知道的一切。

我的目标是将较小的数组复制到一个较大的空数组中,以便较大的数组包含通向较小数组开头的零。

this.intArray的值:{2,2,7,1,1,1} h.intArray的值:{1,1,5}

我希望hCopy.intArray的值为:{0,0,0,1,1,5}

这是我的代码:

    for (int k = h.intArray.length-1;k <= this.intArray.length-1; k++)
    {   

    hCopy.intArray[k] = h.intArray[k - h.intArray.length-1]; 

    }

这是错误消息: 线程“main”中的异常java.lang.ArrayIndexOutOfBoundsException:-2

感谢您提供的任何帮助,我向您保证,为了我的理智,我需要它。

3 个答案:

答案 0 :(得分:0)

请记住在减去时考虑操作顺序,你有k - h.intArray.length - 1,但我认为你想要的是k - (h.intArray.length - 1)

但是,我认为你正在利用一个巧合,即较大的数组是较小数组的两倍。如果它更长,您的代码将崩溃,因为您将超出较小的数组。试试这个:

int start = this.intArray.length - h.intArray.length;
for (int k = start; k < this.intArray.length k++) {
    hCopy.intArray[k] = h.intArray[k - start];
}

请注意,您没有在hCopy中将前3个值清除为0,从您的问题看来,您也需要这样做。

答案 1 :(得分:0)

答案 2 :(得分:0)

    int[] a1 = {2, 2, 7, 1, 1, 1};
    int[] a2 = {1, 1, 5};
    Arrays.fill(a1, 0, a1.length - a2.length, 0);
    System.arraycopy(a2, 0, a1, a1.length - a2.length, a2.length);