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 fuera de límites a pesar de no estar fuera de límites.

Estoy haciendo un programa en Java para una tarea escolar en el que puedes agregar, mover y eliminar cosas de los contenedores. Tengo que usar comandos como “add 100” “remove 50”. El comando de parada “lopeta” es solo una palabra, pero los demás comandos tienen dos partes, el comando y un entero. Cuando uso el comando de parada, obtengo un error de índice fuera de rango, pero todo lo demás funciona. Supongo que es porque el comando de parada solo tiene la palabra y no un entero, pero ¿cómo puedo evitar que ocurra este error? Funciona si uso “lopeta 0”, pero solo quiero usar “lopeta”. Lo siento, los nombres están en finlandés, pero espero que puedas entender esto.
Aquí está mi código

        String luettu = lukija.nextLine();
        String[] osat = luettu.split(" ");
        String komento = osat[0];
        int maara = Integer.valueOf(osat[1]);
        if(luettu.equals("lopeta")) {
                break;
            } 
        if(komento.equals("lisaa")) {
            if(maara < 0) {
                ensimmainen = ensimmainen + 0;
            } else {
                ensimmainen = ensimmainen + maara;
            }
            if(ensimmainen > 100) {
                ensimmainen = 100;
            }
        } else if (komento.equals("siirra")) {
            if(maara < 0) {
                ensimmainen = ensimmainen + 0;
            } if(maara > ensimmainen) {
                ensimmainen = 0;
            } if (toinen + maara > 100) {
                toinen = 100;
            } else {
                ensimmainen = ensimmainen - maara;
                toinen = toinen + maara;
            }
        } else if (komento.equals("poista")) {
            if(maara > toinen) {
                toinen = 0;
            } else {
                toinen = toinen - maara;
            }
        }
Tags:  ,

Answer

  1. Avatar for davy.ai

    El error de arrayIndexOutOfBoundsException ocurre cuando intentas acceder a un índice que no existe en el array. En este caso, cuando se ingresa el comando de detención “lopeta”, el programa intenta acceder al segundo elemento (osat[1]) del array, el cual no existe porque el comando solo tiene una palabra.

    Para evitar que ocurra este error, puedes verificar si la longitud del array es igual a 1 antes de intentar acceder al segundo elemento. Si es igual a 1, puedes asumir que el comando no tiene un parámetro entero y manejarlo de acuerdo.

    Aquí tienes un ejemplo de cómo puedes modificar el código para manejarlo:

    String luettu = lukija.nextLine();
    String[] osat = luettu.split(” “);
    String komento = osat[0];
    int maara = 0;
    if(osat.length > 1) { // verifica si el array tiene más de un elemento
    maara = Integer.valueOf(osat[1]); // si es así, asigna el segundo elemento a la variable maara
    }
    if(luettu.equals(“lopeta”)) {
    break;
    }
    if(komento.equals(“lisaa”)) {
    // el resto del código permanece igual
    } else if (komento.equals(“siirra”)) {
    // el resto del código permanece igual
    } else if (komento.equals(“poista”)) {
    // el resto del código permanece igual
    } else {
    System.out.println(“Comando inválido”); // maneja los comandos inválidos
    }

    Al verificar la longitud del array y asignar el segundo elemento solo si existe, puedes evitar que ocurra el error de arrayIndexOutOfBoundsException cuando se ingresa el comando “lopeta”.

Comments are closed.