problema implementacion try... catch

Iniciado por andrex.125, 25 Septiembre 2013, 16:41 PM

0 Miembros y 1 Visitante están viendo este tema.

andrex.125

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
Código (java) [Seleccionar]

 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.

1mpuls0

#1
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.
abc

andrex.125

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.

1mpuls0

#3
Tiene que ser forzosamente excepciones? xD

Porque puedes hacerlo con expresiones regulares.

Código (java) [Seleccionar]

/*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.
abc