Autor Tema: Java Duda sobre estructura de control de errores para datos introducidos  (Leído 4056 veces)

skatersezo

  • Sin experiencia
  • *
  • Mensajes: 13
    • Ver Perfil
Hola! Soy un programador novato que se está iniciando, estoy escribiendo un programa para para calcular la tasa metabólica basal del usuario y pretendo crear una estructura de control de errores para evitar que el usuario introduzca datos indeseados y que no salga del bucle hasta que introduzca un valor correcto, y no se si lo estoy haciendo de la forma más eficiente. Voy a copiar el método que tengo creado para que el usuario introduzca el peso (por poner un ejemplo), y a comentar que aún no sé como hacer en el casó de que el usuario introduzca una variable alfanumérica, sé que podría convertir un String a un valor Int sí utilizo el método parseint de la clase integer, pero aún así, si el usuario introduce caracteres alfanuméricos me da error... bueno, yo lo he echo así, a ver que opináis.

Código: [Seleccionar]
/*Método para comprobar el peso*/

private static int compruebaPeso() {
boolean pesoCorrecto = false;
int introPeso;
int correctoPeso = 0;
do {
System.out.print("Introduce tu peso en kg: ");
introPeso=entradaTeclado.nextInt();
if (introPeso <= 40 || introPeso > 250 ){
System.out.println("¡Introduce un peso correcto!");
                                pesoCorrecto=false;
} else {
correctoPeso=introPeso;
pesoCorrecto = true;
}

} while (pesoCorrecto==false);

return correctoPeso;
}
« Última modificación: 09 de Diciembre 2016, 20:10 por Ogramar »

skatersezo

  • Sin experiencia
  • *
  • Mensajes: 13
    • Ver Perfil
Re:Duda sobre estructura de control de errores para datos introducidos
« Respuesta #1 en: 06 de Diciembre 2016, 19:11 »
Aquí otra estructura que he creado para comprobar el género.

Código: [Seleccionar]
/*Método para que el usuario introduzca el género*/

public static String compruebaGenero(){

boolean generoCorrecto = false;
String intro_genero;
String correctGene = null;
do {
System.out.print("Introduce tu género (H/M):");
intro_genero=entradaTeclado.next().toUpperCase();
switch (intro_genero){
case ("H"):
correctGene=intro_genero;
generoCorrecto=true;
break;
case ("M"):
correctGene=intro_genero;
generoCorrecto=true;
break;
default:
generoCorrecto=false;
System.out.println("¡Género Incorrecto!");
break;
}


} while (generoCorrecto==false);

return correctGene;
}
« Última modificación: 06 de Diciembre 2016, 19:45 por skatersezo »

ESOJ

  • Intermedio
  • ***
  • APR2.COM
  • Mensajes: 143
    • Ver Perfil
Re:Duda sobre estructura de control de errores para datos introducidos
« Respuesta #2 en: 08 de Diciembre 2016, 06:28 »
Buenos días.

Prueba con esto:
Código: [Seleccionar]


 private static  int compruebaPeso() {
        Scanner entradaTeclado = new Scanner(System.in);
        boolean pesoCorrecto = false;
        int introPeso;
        int correctoPeso = 0;
        do{

            System.out.print("Introduce tu peso en kg: ");
            try{
                introPeso = entradaTeclado.nextInt();
            }
            catch (java.util.InputMismatchException e) //error con otros caracteres
            {             
                introPeso = 0;
                entradaTeclado = new Scanner(System.in);           
            }

            if(introPeso > 40 && introPeso <= 250 ){
                pesoCorrecto=true;
                correctoPeso=introPeso;
            }else{
                System.out.println("¡Peso incorrecto!");               
            }
        }while(pesoCorrecto==false);   
        return correctoPeso;
    }
}

Un saludo

skatersezo

  • Sin experiencia
  • *
  • Mensajes: 13
    • Ver Perfil
Re:Duda sobre estructura de control de errores para datos introducidos
« Respuesta #3 en: 08 de Diciembre 2016, 15:56 »
Muchas gracias ESOJ, entiendo por lo que has hecho que si capturas una excepción esperada puedes ejecutar un código que solucione el error esperado. Supongo que esto podría hacerlo si se da el caso de una división entre 0 o cuando un objeto se encuentra como null (no se si esto lo estoy expresando bien porque tengo otro error en este mismo programa que me da un error así y aún estoy intentando solucionar por mi cuenta). Lo que no entiendo es porque vuelves a instanciar el objeto entradaTeclado Scanner dentro del catch...
« Última modificación: 08 de Diciembre 2016, 16:05 por skatersezo »

ESOJ

  • Intermedio
  • ***
  • APR2.COM
  • Mensajes: 143
    • Ver Perfil
Re:Duda sobre estructura de control de errores para datos introducidos
« Respuesta #4 en: 08 de Diciembre 2016, 15:59 »
Si.Seria lo mismo.Cambiaria la excepcion.

skatersezo

  • Sin experiencia
  • *
  • Mensajes: 13
    • Ver Perfil
Re:Duda sobre estructura de control de errores para datos introducidos
« Respuesta #5 en: 08 de Diciembre 2016, 16:06 »
Si.Seria lo mismo.Cambiaria la excepcion.
He probado el código y me entra en un bucle infinito si introduzco un valor alfanumérico.

ESOJ

  • Intermedio
  • ***
  • APR2.COM
  • Mensajes: 143
    • Ver Perfil
Re:Duda sobre estructura de control de errores para datos introducidos
« Respuesta #6 en: 08 de Diciembre 2016, 16:10 »
Yo lo probe y funcionaba.Lo volvere a mirar y te digo

skatersezo

  • Sin experiencia
  • *
  • Mensajes: 13
    • Ver Perfil
Re:Duda sobre estructura de control de errores para datos introducidos
« Respuesta #7 en: 08 de Diciembre 2016, 16:38 »
Yo lo probe y funcionaba.Lo volvere a mirar y te digo
Ya he encontrado el problema, tu código funcionaba bien, pero yo lo fui a escribir a mano y transcribí mal una cosa, te la enseño:
Código: [Seleccionar]
/*Método para comprobar el peso*/

private static  int compruebaPeso() {
       
        boolean pesoCorrecto = false;
        int introPeso;
        int correctoPeso = 0;
        do{

            System.out.print("Introduce tu peso en kg (sin decimales): ");
            try{
                introPeso = entradaTeclado.nextInt();
            }
            catch (java.util.InputMismatchException e) //error con otros caracteres
            {             
                introPeso = 0;
              Scanner  entradaTeclado = new Scanner(System.in);  //Aquí introduje la palabra Scanner antes de entradaTeclado         
            }

            if(introPeso > 40 && introPeso <= 250 ){
                pesoCorrecto=true;
                correctoPeso=introPeso;
            }else{
                System.out.println("¡Peso incorrecto!");               
            }
        }while(pesoCorrecto==false);   
        return correctoPeso;
    }

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".