Foros aprenderaprogramar.com
Aprender a programar => C, C++, C#, Java, Visual Basic, HTML, PHP, CSS, Javascript, Ajax, Joomla, MySql y más => Mensaje iniciado por: skatersezo en 06 de Diciembre 2016, 17:12
-
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.
/*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;
}
-
Aquí otra estructura que he creado para comprobar el género.
/*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;
}
-
Buenos días.
Prueba con esto:
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
-
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...
-
Si.Seria lo mismo.Cambiaria la excepcion.
-
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.
-
Yo lo probe y funcionaba.Lo volvere a mirar y te digo
-
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:
/*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;
}