es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Java: matriz multidimensional fuera de límites

He estado intentando llenar mi arreglo

int[][][] sudoku = new int[5][9][9];

con

String[][] tmp = new String[21][21];

tmp[][] contiene números como

005700020009600020
490060010140050030

Por ejemplo, este código funciona perfectamente y me da el número que deseo

System.out.println(Integer.valueOf(tmp[4][10]));

Pero este código

//sudoku1
b=0; c=0;
for (int i = 0; i < 6; i++) {
for (int j = 9; j < 18; j++) {
sudoku[1][b][c] = Integer.valueOf(tmp[i][j]);
c++;
}
b++;
}

arroja el error “Index 9 fuera de los límites para una longitud de 9”

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    El error “Índice 9 fuera de los límites para una longitud de 9” significa que se está intentando acceder a un elemento en un arreglo que está fuera del tamaño del arreglo. En el código proporcionado, el bucle for anidado está iterando a través de los índices 9 a 18 de la segunda dimensión del arreglo tmp (String[][] tmp = new String[21][21];), pero el tamaño de la segunda dimensión del arreglo sudoku es solo de 9.

    Por lo tanto, al intentar asignar el valor a sudoku[1][b][c], donde b y c son variables en incremento, se está excediendo el tamaño de la segunda dimensión del arreglo sudoku, lo que produce el error “Índice 9 fuera de los límites para una longitud de 9”.

    Para resolver este problema, es necesario modificar el tamaño de la segunda dimensión del arreglo sudoku para que coincida con el tamaño de la segunda dimensión del arreglo tmp, que es 21, de la siguiente manera:

    int[][][] sudoku = new int[5][21][21];
    

    Alternativamente, es necesario modificar el bucle for anidado para que solo itere a través de los índices 9 a 17 de la segunda dimensión, que son los índices dentro del tamaño de la segunda dimensión del arreglo sudoku. Esto se puede lograr cambiando la condición del bucle interno a “j < 17” de la siguiente manera:

    for (int i = 0; i < 6; i++) {
        for (int j = 9; j < 17; j++) {
            sudoku[1][b][c] = Integer.valueOf(tmp[i][j]);
            c++;
        }
        b++;
    }
    

    Al realizar uno de los cambios anteriores, el programa debería poder llenar el arreglo sudoku con los valores del arreglo tmp sin lanzar el error “Índice 9 fuera de los límites para una longitud de 9”.

Comments are closed.