Проблема с ArrayIndexoutofBoundSexception
-
27-10-2019 - |
Вопрос
Запуск этого кода дает мне массив за пределы исключения на границе на строке:
int sum = array[k]+array[l]; //sum of l and k
... должно быть простое исправление, но я не могу понять, что может это вызвать, учитывая, что я использую массив. Кто -нибудь может помочь?
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;
}
Решение
Вам нужно использовать «<» вместо «<=» в ваших циклах.
Поскольку первая позиция в массиве составляет 0, последняя позиция-длина 1. Что происходит, так это то, что когда вы достигнете последней итерации, индекс уже выходит за пределы массива.
Например, если у вас есть массив:
Array = [0,1,2,3] Последняя итерация будет массивом [4], длина массива, которая находится вне границ.
Другие советы
<= следует заменить на
Измените свои петли, чтобы быть:
for (int k = 0; k < array.length; k++)
а также
for (int l = 0; l < array.length; l++)
Поскольку массивы на 0, вы хотите пройти на 1 меньше, чем длины.