Проблема с ArrayIndexOutOfBoundsException - PullRequest
1 голос
/ 20 октября 2011

Запуск этого кода дает мне исключение массива за пределами строки в строке:

int sum = array[k]+array[l]; //sum of l and k

... Должно быть простое исправление, но я не могу понять, что может быть причиной, учитываяЯ использую array.length, чтобы ограничить цикл.Кто-нибудь может помочь?

PS Для записи, этот код должен искать в массиве 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;
}

Ответы [ 3 ]

7 голосов
/ 20 октября 2011

Вам необходимо использовать «<» вместо «<=» в ваших циклах for. </p>

Поскольку первая позиция в массиве равна 0, последняя позиция равна длине-1.Происходит следующее: когда вы достигаете последней итерации, индекс уже выходит за границы массива.

Например, если у вас есть массив:

array = [0,1, 2,3] последней итерацией будет массив [4], длина массива которого выходит за пределы.

2 голосов
/ 20 октября 2011

<= следует заменить на <</p>

0 голосов
/ 20 октября 2011

Измените ваши циклы на:

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

и

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

Поскольку массивы основаны на 0, вы хотите, чтобы длина была на 1 меньше длины.

...