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]; 

    }

エラーメッセージは次のとおりです: Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: -2

助けてくれてありがとう。正気を保つために必要だと断言します。

4

3 に答える 3

0

を減算するときは演算の順序を考慮することを忘れないでk - h.intArray.length - 1くださいk - (h.intArray.length - 1)

しかし、大きな配列が小さな配列の2倍のサイズであるという偶然を利用していると思います。それより長い場合、小さい方の配列をオーバーランするため、コードがクラッシュします。これを試して:

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 に答える
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 に答える