0

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

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

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

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

4

3 回答 3

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);
于 2013-02-02T05:30:12.750 回答
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,从您的问题看来,您也需要这样做。

于 2013-02-02T04:09:29.157 回答
0

这是执行此操作的标准库方法;仔细选择偏移量:

http://docs.oracle.com/javase/7/docs/api/java/lang/System.html#arraycopy%28java.lang.Object,%20int,%20java.lang.Object,%20int,%20int% 29

于 2013-02-02T04:55:26.440 回答