ArrayIndexOutOfBoundsException问题

Rub*_*Jr. 1 java arrays vector indexoutofboundsexception

运行此代码在行中为我提供了一个数组超出范围的异常:

int sum = array[k]+array[l]; //sum of l and k
Run Code Online (Sandbox Code Playgroud)

...应该是一个简单的修复,但我无法弄清楚是什么原因导致它,因为我正在使用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;
}
Run Code Online (Sandbox Code Playgroud)

pca*_*cao 7

您需要在for循环中使用"<"而不是"<=".

由于数组中的第一个位置为0,因此最后一个位置为length-1.发生的事情是,当你到达最后一次迭代时,索引已经超出了数组的范围.

例如,如果你有一个数组:

array = [0,1,2,3]最后一次迭代将是array [4],即数组的长度,超出了界限.