Foro de elhacker.net

Programación => Java => Mensaje iniciado por: andrex.125 en 25 Septiembre 2013, 16:41 pm



Título: problema implementacion try... catch
Publicado por: andrex.125 en 25 Septiembre 2013, 16:41 pm
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
  1.  static void registarMusico(Musico[] vector) {
  2.        try {
  3.  
  4.        String cedula = JOptionPane.showInputDialog("Ingrese cedula ");
  5.        String nombre = JOptionPane.showInputDialog("Ingrese Nombre: ");
  6.        double salario = Double.parseDouble(JOptionPane.showInputDialog(null, "Asignar salario:"));
  7.        String instrumento = JOptionPane.showInputDialog("Ingrese instrumento: ");
  8.        String telefono = JOptionPane.showInputDialog("Ingrese telefono: ");
  9.  
  10.        vector[posM] = new Musico(instrumento, cedula, nombre, salario);
  11.        posM++;
  12.  
  13.        }catch (NumberFormatException nfe) {
  14.                JOptionPane.showMessageDialog(null, "El formato de número es erróneo");
  15.  
  16.  
  17.    }
  18.  
  19.    }
  20.  

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.


Título: Re: problema implementacion try... catch
Publicado por: 1mpuls0 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.

Edito:
Por cierto la asignación al vector tiene que ser una vez capturado todos los valores correctamente.


Título: Re: problema implementacion try... catch
Publicado por: andrex.125 en 25 Septiembre 2013, 17:03 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.


Título: Re: problema implementacion try... catch
Publicado por: 1mpuls0 en 25 Septiembre 2013, 17:21 pm
Tiene que ser forzosamente excepciones? xD

Porque puedes hacerlo con expresiones regulares.

Código
  1. /*Autor: 1mpuls0*/
  2.  
  3. public boolean isAlpha(String value) {
  4.        try {
  5.            if(!value.isEmpty()) {
  6.                Pattern p = Pattern.compile("^[a-zA-Z]+$");
  7.                Matcher m = p.matcher(value);
  8.                if(m.find()) {
  9.                    return true;
  10.                } else {
  11.                    return false;
  12.                }
  13.            } else {
  14.                return false;
  15.            }
  16.        } catch(NullPointerException npe) {
  17.            System.out.println(npe.getMessage());
  18.            return false;
  19.        } catch(PatternSyntaxException pse) {
  20.            System.out.println(pse.getMessage());
  21.            return false;
  22.        }
  23.    }
  24.  

El método isAlpha retorna true si el valor solo contiene letras.