#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.