hola, estoy haciendo un método para registrar un músico en una posición de un vector, hasta aquí todo bien, ahora tengo que implementar el try catch y lo hice de esta forma :
registrar músico
static void registarMusico(Musico[] vector) {
try {
String cedula = JOptionPane.showInputDialog("Ingrese cedula ");
String nombre = JOptionPane.showInputDialog("Ingrese Nombre: ");
double salario = Double.parseDouble(JOptionPane.showInputDialog(null, "Asignar salario:"));
String instrumento = JOptionPane.showInputDialog("Ingrese instrumento: ");
String telefono = JOptionPane.showInputDialog("Ingrese telefono: ");
vector[posM] = new Musico(instrumento, cedula, nombre, salario);
posM++;
}catch (NumberFormatException nfe) {
JOptionPane.showMessageDialog(null, "El formato de número es erróneo");
}
}
Lo que no me gusta es que cada vez que el usuario se equivoca se lanza la excepción pero se devuelve hasta el principio y hay que comenzar de nuevo a llenar todos los datos, quisiera saber como podría hacer para que no se devuelva a pedir todos los datos, que solo pida en el que se equivoco y siga su ejecución.
Gracias.
1. Coloca la excepción solo donde podría producirse un error. En este caso sería en la variable salario.
2. Utiliza un do-while para controlar el bloque del try-catch. Cada vez que se produzca la excepción volverá a pedir que ingrese unicamente el salario. Esto se puede hacer implementando una bandera booleana y utilizarla como condición en el do-while.
Edito:
Por cierto la asignación al vector tiene que ser una vez capturado todos los valores correctamente.
Cita de: Darhius en 25 Septiembre 2013, 16:57 PM
1. Coloca la excepción solo donde podría producirse un error. En este caso sería en la variable salario.
2. Utiliza un do-while para controlar el bloque del try-catch. Cada vez que se produzca la excepción volverá a pedir que ingrese unicamente el salario. Esto se puede hacer implementando una bandera booleana y utilizarla como condición en el do-while.
gracias por tu respuesta.
me puedes ayudar con una excepción, para verificar los otros datos osea para que en los de tipo String solo se ingrese caracteres de la a-z, dado que en un String se puede ingresar cualquier carácter.
Gracias.
Tiene que ser forzosamente excepciones? xD
Porque puedes hacerlo con expresiones regulares.
/*Autor: 1mpuls0*/
public boolean isAlpha(String value) {
try {
if(!value.isEmpty()) {
Pattern p = Pattern.compile("^[a-zA-Z]+$");
Matcher m = p.matcher(value);
if(m.find()) {
return true;
} else {
return false;
}
} else {
return false;
}
} catch(NullPointerException npe) {
System.out.println(npe.getMessage());
return false;
} catch(PatternSyntaxException pse) {
System.out.println(pse.getMessage());
return false;
}
}
El método isAlpha retorna true si el valor solo contiene letras.