ArrayIndexOutofBoundSexceptionの問題
-
27-10-2019 - |
質問
このコードを実行すると、ラインの範囲外のアレイが得られます。
int sum = array[k]+array[l]; //sum of l and k
...単純な修正である必要がありますが、ループをバインドするためにArray.lengthを使用していることを考えると、何がそれを引き起こしているのかを理解することはできません。誰かが助けることができますか?
PSレコードの場合、このコードは、ターゲットINTに等しいINTまたは単一のINTのペアのINT配列を検索することになっています。 Printlnのみを使用して動作しますが、ターゲットに合計する数字をベクトルに入れようとしています。
public Vector<Vector<Integer>> subsetSum(int[] array, int target) {
//creates vectors, adds inner vector to another vector
outer = new Vector<Vector<Integer>>();
inner = new Vector<Integer>();
outer.add(inner);
for (int k = 0; k <= array.length; k++) {
for (int l = 0; l <= array.length; l++) {
int sum = array[k]+array[l]; //sum of l and k
int i = 0;
if (sum == target) {
inner.add(i, array[l]);
inner.add(i, array[k]);
i++;
//prints combination
System.out.println(array[l]+"+"+array[k]+"="+target);
}
if (k == target) {
inner.add(i, array[k]);
i++;
//prints if int equals target
System.out.println(k+"="+target);
}
if (l == target) {
inner.add(i, array[l]);
i++;
//prints if int equals target
System.out.println(l+"="+target);
}
}
}
//return combinations that add up to target in vector form
System.out.println(outer);
return outer;
}
解決
ループに「<=」の代わりに「<」を使用する必要があります。
配列の最初の位置は0であるため、最後の位置は長さ1です。起こっているのは、最後のイテレーションに到達すると、インデックスはすでに配列の範囲外であるということです。
たとえば、配列がある場合:
配列= [0,1,2,3]最後の反復は、配列[4]、アレイの長さであり、範囲外です。
他のヒント
<=に置き換える必要があります
ループを変更します。
for (int k = 0; k < array.length; k++)
と
for (int l = 0; l < array.length; l++)
配列は0ベースであるため、長さより1個少なくなります。
所属していません StackOverflow