Java - No toma el Try Catch

 
Vista:

No toma el Try Catch

Publicado por Andres (3 intervenciones) el 23/08/2013 19:00:19
Estimados.

Tengo este código en el cual no toma el try catch en el segundo menu.

La idea, es que el boton cancelar del segundo menu arroje un mensaje y cierre el programa

desde ya muchas gracias


saludos.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
public static void main(String []agrs){
 
 
String nombre = JOptionPane.showInputDialog(null,"Ingresa tu nombre","Tarea 2",JOptionPane.INFORMATION_MESSAGE);
if (nombre==null){System.exit(0);}
 
    int operacion=0;
        double n1,n2,s,m,d,r;
try{
        do{
            operacion=Integer.parseInt(JOptionPane.showInputDialog(null,"1.- Sumar \n2.- Restar \n3.- Multiplicar \n4.- Dividir \n5.- Salir","Ingrese una opcion",JOptionPane.INFORMATION_MESSAGE));
 
      switch(operacion)
            {
                case 1:
                    n1=Double.parseDouble(JOptionPane.showInputDialog("Ingrese numero 1"));
                    n2=Double.parseDouble(JOptionPane.showInputDialog("Ingrese numero 2"));
                    s=n1+n2;
                    JOptionPane.showMessageDialog(null,"El resultado de la suma es:"+s);
                    break;
                case 2:
                    n1=Double.parseDouble(JOptionPane.showInputDialog("Ingrese numero 1"));
                    n2=Double.parseDouble(JOptionPane.showInputDialog("Ingrese numero 2"));
                    r=n1-n2;
                    JOptionPane.showMessageDialog(null,"El resultado de la resta es:"+r);
                    break;
                case 3:
                    n1=Double.parseDouble(JOptionPane.showInputDialog("Ingrese numero 1"));
                    n2=Double.parseDouble(JOptionPane.showInputDialog("Ingrese numero 2"));
                    m=n1*n2;
                    JOptionPane.showMessageDialog(null,"El resultado de la multiplicacion es:"+m);
                    break;
                case 4:
                    n1=Double.parseDouble(JOptionPane.showInputDialog("Ingrese numero 1"));
                    n2=Double.parseDouble(JOptionPane.showInputDialog("Ingrese numero 2"));
                    d=n1/n2;
                    JOptionPane.showMessageDialog(null,"El resultado de la division es:"+d);
                    break;
                case 5:
                    JOptionPane.showMessageDialog(null,"Adios "+nombre.toUpperCase());
                    break;
            }
          }while(operacion!=5);
       }catch(NullPointerException e){JOptionPane.showMessageDialog(null, "Haz Cancelado la Operación"); }
    }
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

No toma el Try Catch

Publicado por antonio dieguez (12 intervenciones) el 23/08/2013 19:12:54
Hola, te recomiendo no detectar el cancelamiento de la operación atrapando una NullPointerException, es un poquito caótico. Más encima como norma hay que tratar de evitar usar muchas excepciones en el control de flujo, y usarlas como el nombre lo dice, excepciones, o sea algo excepcional, así que de partida había que cuestionárselo. Me refiero a que si tratas de ser excesivamente inteligente(...) con las excepciones luego otro ve tu código y te va a odiar.

De todas formas el código tendría que ser un poco más largo, dice abajo que se ha cancelado la operación pero se lanza una excepción en otros casos, como dividir por cero, o ingresar un número no válido o no ingresar nada.

Específicamente, Double.parseDouble ni siquiera arroja NullPointerException, fíjate en la documentación xd
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

No toma el Try Catch

Publicado por Andres (3 intervenciones) el 23/08/2013 19:30:59
Entonces, si cambiase el NullPointer, por cuál debería optar para que el programa (que es sencillo) arroje el mensaje y cierre?..

gracias..
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

No toma el Try Catch

Publicado por antonio dieguez (12 intervenciones) el 23/08/2013 19:51:35
así tal cual, a primera vista arroja NumberFormatException

no arroja excepción al dividir por cero porque java no arroja excepción al dividir por cero si son double, yo ni sabía jaja buena.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

No toma el Try Catch

Publicado por Andres (3 intervenciones) el 23/08/2013 20:11:02
Amigo mio.... muchas gracias. tema resuelto y buscaré mas información acerca de este tema.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

No toma el Try Catch

Publicado por antonio dieguez (12 intervenciones) el 23/08/2013 20:38:10
de nada, y sobre el blablabla que dije u.u es en general nomás o si uno inventara excepciones para condiciones comunes y silvestres, está normal la excepción abajo si la cosa es chica o son tan pocos datos, lo feo es lo básico del ejemplo nomás y también se me hizo raro ver un catch(NullPointerException) no sé si será común. saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

No toma el Try Catch

Publicado por Super_ (1 intervención) el 26/08/2013 15:52:38
Seria mas facil hacer el catch con Throwable y no "NullPointerException "
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar