Проблема с ArrayIndexOutOfBoundsException

#java #arrays #vector #indexoutofboundsexception

#java #массивы #вектор #исключение indexoutofboundsexception

Вопрос:

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

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

Ответ №1:

Вам нужно использовать «<» вместо «<=» в циклах for.

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

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

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

Ответ №2:

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

Ответ №3:

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

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

и

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

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