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.

Í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.
Tags:  , ,

Answer

  1. Avatar for 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étodo genVisual:

    java
    for (int n = 0; n < height; n++) {
    for (int i = 0; n < length; n++) {
    // ...
    }
    }

    La segunda condición del bucle for está comparando n con length, en lugar de i. Esto significa que el bucle continuará ejecutándose hasta que el valor de n sea mayor o igual que length, lo que ocasiona el error de índice fuera de los límites cuando se intenta acceder a visual[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.

Comments are closed.