Pregunta

Estoy intentando ejecutar un fragmento de código que busca un valor de entrada del usuario.Esta acción está contenida en un método personalizado que escribí, llamado getTriangleDim();el método lee el valor int del usuario, se asegura de que esté dentro de un rango determinado y luego devuelve el valor int que se ingresó.El método funciona muy bien y no tengo problemas con él.

El problema surge cuando ingreso un valor no int para mi método getTriangleDim().Me da un error InputMismatchException.Escribí una declaración try-catch en un bucle do- while para intentar solucionar este problema.Pero esta es la primera vez que uso una declaración try-catch y aparentemente me falta algo.

Aquí está el código para la declaración try-catch anidada dentro del bucle do- while:

//loop to scan for triangle dimension
        boolean bError = true;
        int triangle;

        do{
            try {
                triangle = getTriangleDim();
                bError=false;
                }
            catch (Exception e){
                System.out.println("You did not enter an integer, please enter an integer value");
                triangle = getTriangleDim();

                }
        }while (bError);

si lo pruebo ingresando un valor de carácter en lugar de int, en realidad detecta el error una vez y luego imprime mi declaración "no lo hiciste...".Pero si vuelvo a ingresar otro número que no sea int, aparece nuevamente un error de tiempo de ejecución que dice... lo has adivinado...Error de excepción de entrada incorrecta.

El código de mi método está aquí:

//method for scanning triangle dimensions from keyboard
    public static int getTriangleDim(){
        int triangle = 0;
        Scanner keyboard = new Scanner(System.in);
        do{
        System.out.print("Enter a non-zero integer length (+/-1 - +/-16): ");
        triangle = keyboard.nextInt();
        if((!(triangle <= 16 && triangle >= 1))&&(!(triangle >= -16 && triangle <= -1)))
            System.out.println("Inpute value outside of range");
        }while((!(triangle <= 16 && triangle >= 1))&&(!(triangle >= -16 && triangle <= -1)));
        return triangle;
    }

Necesito que el ciclo Do-While continúe, pero sigo recibiendo estos errores.

¿Fue útil?

Solución

No es necesario solicitar información en el catch bloquear.Ya estás en un bucle, por lo que puedes detectar la excepción, decirle al usuario que te dé una entrada válida y luego no tendrás que hacer nada más: volverás al principio.

do{
    try {
        triangle = getTriangleDim();
        bError=false;
    } catch (Exception e){
        System.out.println("You did not enter an integer, please enter an integer value");
        // Don't do anything else in here: we will loop back to the beginning again and get new input!
    }
}while (bError);

Como nota al margen (y como habrás notado), tu código no se compilará actualmente si intentas usar triangle fuera de eso try bloquear, porque "triangle might not have been initialized".Esto se debe al hecho de que el compilador No se puede determinar en tiempo de compilación qué hará su programa en tiempo de ejecución.:es decir, el compilador no puede ver eso triangle siempre se inicializará dentro de ese bucle.Entonces su declaración de variable también debería establecer triangle a algún valor predeterminado. 0 es el valor predeterminado normal para int, pero usa lo que tenga sentido en tu programa (parece 0 está bien, según tu getTriangleDim código).

int triangle = 0;
do { // etc.

De esta manera puedes "prometir" al compilador que triangle tendrá un valor cuando salga del bucle y podrá usarlo en otro lugar.

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