Foros del Web » Programación para mayores de 30 ;) » Java »

pregunta basica con un switch

Estas en el tema de pregunta basica con un switch en el foro de Java en Foros del Web. Hola nuevamente, a algunos les dará mucha risa lo que les voy a preguntar, y eso es que construi un switch dentro de un ciclo ...
  #1 (permalink)  
Antiguo 28/03/2009, 08:35
 
Fecha de Ingreso: marzo-2008
Mensajes: 63
Antigüedad: 16 años, 2 meses
Puntos: 0
pregunta basica con un switch

Hola nuevamente, a algunos les dará mucha risa lo que les voy a preguntar, y eso es que construi un switch dentro de un ciclo do while, ya saben el tipico switch (op), donde op es int, lo interesante es como hago para que cuando yo en vez de poner una de las opciones que me marca el menu y escribo un caracter o un texto, entonces la respuesta del programa en vez de mandarme una exeption simplemente me diga opcion no valida, esto es, por ejemplo si tengo opciones del 0 al 4 y yo tecleo la opción 5, la instrucción default me dice opción no valida, eso esta muy bien, pero si yo tecleo una "a", la instrucción default no funciona y me manda directo a una exeption y se sale del programa, lo que prentedo es que la instrucción default funcione tanto como para enteros, como para caracteres, de verdad estuve leyendo un poco de esto pero no lo he solucionado hasta el momento.

les dejo mi código

Código:
      int n1,n2,sum,res,div,multi; 
      int op;
      do
      {
         BufferedReader in =new BufferedReader(new InputStreamReader(System.in)); 
         System.out.println("  OPCIONES DISPONIBLES");
         System.out.println("");
         System.out.println(" 1. Sumar");
         System.out.println(" 2. Restar");
         System.out.println(" 3. Multiplicar");
         System.out.println(" 4. Dividir");
         System.out.println(" 0. Salir");
         System.out.println(" ");
         System.out.println(" ");
         System.out.println(" ");
         System.out.println(" ");
         System.out.println(" ");
         System.out.println(" ");
         System.out.println(" ");
         System.out.println(" ");
         System.out.println(" ");
         System.out.println(" ");
         System.out.println(" ");
         System.out.print(" TECLEE LA OPCION DESEADA SEGUIDA POR ENTER:  ");
         
         op = Integer.parseInt(in.readLine());
          
         switch(op)
         {
            case 1:
               System.out.print("introduce el primer numero " ); 
               n1 = Integer.parseInt(in.readLine()); 
               System.out.print("introduce el segundo numero " ); 
               n2 = Integer.parseInt(in.readLine());
               sum = n1 + n2; 
               System.out.println("la suma es: "+ sum);         
            break;
                   
            case 2: 
               System.out.print("introduce el primer numero " ); 
               n1 = Integer.parseInt(in.readLine()); 
               System.out.print("introduce el segundo numero " ); 
               n2 = Integer.parseInt(in.readLine());
               res = n1 - n2; 
               System.out.println("la resta es: "+ res); 
            break; 
             
            case 3: 
                //hace algo
            break; 

            case 4: 
                //hace algo
            break;              

            case 0: 
               System.out.print("Saliendo ... "); 
               System.exit(0);
            break;

            default: 
                System.out.print("eleccion incorrecta" );
            break;
                     
         }
      }
      while(op!=4);
      
   }  

}
Gracias por su ayuda.
  #2 (permalink)  
Antiguo 28/03/2009, 09:55
 
Fecha de Ingreso: diciembre-2008
Mensajes: 100
Antigüedad: 15 años, 4 meses
Puntos: 0
Respuesta: pregunta basica con un switch

Hola, ¿que tal?

En primer lugar he observado esto:


Cita:
System.out.println(" ");
System.out.println(" ");
System.out.println(" ");
System.out.println(" ");
System.out.println(" ");
System.out.println(" ");
System.out.println(" ");
System.out.println(" ");
System.out.println(" ");
System.out.println(" ");
System.out.println(" ");
¿Por qué haces tantos println seguidos?
No sería mejor hacer:

Código:
 System.out.println("\n\n\n\n\n\n");
¿O algo similar? Es que me ha sorprendido ver tantos seguidos.

Respecto a lo otro, podías recoger el valor de teclado y a este aplicarle un cast a entero.
Cita:
op = Integer.parseInt(in.readLine());
El problema está en esta línea. Cuando se llama al método parseInt, espera una cadena de carácteres (String) con números. Si recibe "123" por ejemplo, funciona bien y lo convierte a "123" (entero). Pero si recibe cualquier carácter que no sea un número, se produce una excepción de tipo java.lang.NumberFormatException. Por lo que debes de tratarla cuando se llame a este método. Podrías poner el mismo mensaje de error al tratar la excepción.

Saludos.
  #3 (permalink)  
Antiguo 28/03/2009, 12:36
 
Fecha de Ingreso: octubre-2005
Ubicación: Córdoba, Veracruz
Mensajes: 42
Antigüedad: 18 años, 6 meses
Puntos: 0
Respuesta: pregunta basica con un switch

Podrías poner el op = Integer.parseInt(in.readLine()); y el switch dentro de un bloque try, y en el catch (java.lang.NumberFormatException e) pones el mensaje que deseas mostrar.
No estoy seguro que funcione, pero nada pierdes con probar.
¡Saludos!
  #4 (permalink)  
Antiguo 28/03/2009, 17:53
 
Fecha de Ingreso: marzo-2008
Mensajes: 63
Antigüedad: 16 años, 2 meses
Puntos: 0
Respuesta: pregunta basica con un switch

Hola gracias por las respuestas, lo que hoolligan666 dice efectivamente funciona al colocar el switch dentro de un try, lo unico que me falta saber es que return usar para que en vez de que el progama se termine, vuelva a comenzar
Código:
  try
   {
      switch   
   }
   catch (java.lang.NumberFormatException e)
   {
      System.out.print("eleccion incorrecta" );
   }
  #5 (permalink)  
Antiguo 29/03/2009, 03:24
 
Fecha de Ingreso: octubre-2005
Ubicación: Córdoba, Veracruz
Mensajes: 42
Antigüedad: 18 años, 6 meses
Puntos: 0
Respuesta: pregunta basica con un switch


Debo analizar esto de mejor manera, porque según yo, si pones el try y el catch dentro del while, no debería terminar el programa... aunque claro, no soy un experto en java...
Déjame leo un poco y analizo esto y te respondo.
¡Saludos!

Edito: ahora que veo bien tu código, creo que la condición del while no es correcta, pues estás diciendo que mientras no sea 4 que se ejecute indefinidamente, pero tu opción para salir es el 0
  #6 (permalink)  
Antiguo 29/03/2009, 05:09
 
Fecha de Ingreso: diciembre-2008
Mensajes: 100
Antigüedad: 15 años, 4 meses
Puntos: 0
Respuesta: pregunta basica con un switch

Es cierto, la opción del bucle do-while no la has pensado bien... Cambia la condición y con que el try-catch esté dentro controlando la excepción debería bastar.
  #7 (permalink)  
Antiguo 30/03/2009, 18:18
 
Fecha de Ingreso: marzo-2008
Mensajes: 63
Antigüedad: 16 años, 2 meses
Puntos: 0
Respuesta: pregunta basica con un switch

No he conseguido nada aún, alguna sugerencia?
  #8 (permalink)  
Antiguo 30/03/2009, 19:07
 
Fecha de Ingreso: septiembre-2008
Ubicación: Córdoba
Mensajes: 67
Antigüedad: 15 años, 7 meses
Puntos: 0
Respuesta: pregunta basica con un switch

Me parece que esto es lo mejor que puedes hacer, tal como dice oscarmoal

try
{
switch
}
catch (java.lang.NumberFormatException e)
{
System.out.print("eleccion incorrecta" );
}

Si deseas eliminar el try-catch por alguna otra razon hace que op sea de tipo String o char, en vez de int y no te haria falta usar el metodo parseInt.

Saludos
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:32.