1

このコードを実行すると、次の行で範囲外の配列の例外が発生します。

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;
}
4

3 に答える 3

7

for ループでは "<=" の代わりに "<" を使用する必要があります。

配列の最初の位置は 0 であるため、最後の位置は長さ 1 です。何が起こっているかというと、最後の繰り返しに到達したときに、インデックスが既に配列の範囲外になっているということです。

たとえば、配列がある場合:

array = [0,1,2,3] 最後の反復は、配列の長さである array[4] になり、範囲外になります。

于 2011-10-19T20:57:18.530 に答える
2

<= は < に置き換える必要があります

于 2011-10-19T20:58:22.257 に答える
0

ループを次のように変更します。

for (int k = 0; k < array.length; k++)

for (int l = 0; l < array.length; l++)

配列は 0 から始まるため、長さより 1 少なくする必要があります。

于 2011-10-19T20:58:51.647 に答える