Pregunta

Ejecutar este código me da una matriz de excepción de límites en la línea:

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

... debería ser una solución simple, pero no puedo entender qué podría estar causando, dado que estoy usando una matriz. Longitud para atar el bucle. ¿Alguien puede ayudar?

PD para el registro, se supone que este código busca una matriz int para pares de ints o ints individuales que igual a un objetivo int. Funciona usando únicamente los println, pero estoy tratando de poner los números que se suman al objetivo en los vectores.

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;
}
¿Fue útil?

Solución

Debe usar "<" en lugar de "<=" en sus bucles para.

Dado que la primera posición en la matriz es 0, la última posición es longitud-1. Lo que está sucediendo es que cuando llegas a la última iteración, el índice ya está fuera de los límites de la matriz.

Por ejemplo, si tiene una matriz:

Array = [0,1,2,3] La última iteración sería una matriz [4], la longitud de la matriz, que está fuera de los límites.

Otros consejos

el <= debe ser reemplazado con

Cambia tus bucles para ser:

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

y

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

Dado que las matrices están basadas en 0, desea ir 1 menos de la longitud.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top