Índice de matriz fuera de límites en matriz de caracteres
Estoy intentando generar un tablero de juego como una matriz 2D de caracteres, la capa superior de la matriz está mostrando las versiones de caracteres de los enteros (no hay problemas allí), sin embargo, el código está arrojando un mensaje de error, como se muestra a continuación.
java -classpath .:/run_dir/junit-4.12.jar:target/dependency/*
Main Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 2 out of bounds for length 2
at Main.genVisual(Main.java:16)
at Main.main(Main.java:3)
Aquí está mi código:
class Main {
public static void main(String[] args) {
char[][] hehe = genVisual(7, 2);
}
public static char[][] genVisual(int length, int height) {
char[][] visual = new char[height][length];
char character = ' ';
for (int n = 0; n < height; n++) {
for (int i = 0; n < length; n++) {
if (n == 0) {
int w = i + 1;
character = (char) w;
visual[n][i] = character;
} else {
visual[n][i] = 'x';
}
}
}
return visual;
}
}
He intentado cambiar los valores que controlan el tamaño de la lista en el ciclo for
y he navegado por este sitio web en busca de respuestas, sin embargo, no veo ningún problema con el programa.
davy.ai
El mensaje de error sugiere que estás tratando de acceder a un índice que está fuera de los límites de tu arreglo. En este caso, el índice 2 está fuera de los límites para la longitud 2 de tu arreglo.
Viendo tu código, el problema está en el bucle
for
anidado dentro del métodogenVisual
:java
for (int n = 0; n < height; n++) {
for (int i = 0; n < length; n++) {
// ...
}
}
La segunda condición del bucle
for
está comparandon
conlength
, en lugar dei
. Esto significa que el bucle continuará ejecutándose hasta que el valor den
sea mayor o igual quelength
, lo que ocasiona el error de índice fuera de los límites cuando se intenta acceder avisual[n][i]
.Para solucionar esto, debes cambiar la segunda condición a
i < length
:java
for (int n = 0; n < height; n++) {
for (int i = 0; i < length; i++) {
// ...
}
}
Esto asegurará que el bucle solo se ejecute para índices válidos del arreglo.