Necesito ayuda con un menu en java (switch)

Iniciado por Mike_Mike_2000, 24 Septiembre 2014, 02:15 AM

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

Mike_Mike_2000

Hola, soy nuevo
Tengo pequeño problema con un menu en el que estoy trabajando
en mi menu hay 11 opciones y el usuario debe introducir el NOMBRE de la opción que desea pero me marca un error al comparar los datos.
Los errores los marca en:
case 'DIVISION' :
case 'ORDEN':
etc...

Citarimport java.util.Scanner;
public class Menu {
   static Scanner sc= new Scanner (System.in);
public static void main(String[] args) {
   char M;
   System.out.println("*Menu*");
   System.out.println("");
   System.out.println("1.-DIVISION");
   System.out.println("2.-ORDEN");
   System.out.println("3.-SERIES PAR_IMPAR");
   System.out.println("4.-SERIE PRIMO");
   System.out.println("5.-TRIANGULOS");
   System.out.println("6.-DNI");
   System.out.println("7.-LONGITUDES");
   System.out.println("8.-CUADRADOS PERFECTOS");
   System.out.println("9.-NUMERO TRIANGULAR");
   System.out.println("10.-CARACOL");
   System.out.println("11.-RECTANGULOS" \n);
   System.out.println("A continuación introduzca el nombre del programa que desea elegir");
   System.out.println("**IMPORTANTE** El nombre del programa que desea elegir debe estar en mayusculas y escrito correctamente");
   
   switch(M){
   case 'DIVISION' :
      break;
   case 'ORDEN':
      break;
   case 'SERIES PAR_IMPAR':
      break;
   case 'SERIE PRIMO':
       break;
   case 'TRIANGULOS':
      break;
   case 'DNI':
      break;
   case 'LONGITUDES':
      break;
   case 'CUADRADOS PERFECTOS':
      break;
   case 'NUMERO TRIANGULAR':
      break;
   case 'CARACOL':
      break;
   case 'RECTANGULOS':
      break;
      default:
         System.out.println("ERROR");
         System.out.println("Debe introducir correctamente el nombre del programa que desea en mayusculas ");
   }
}
}

Baal_30

#1
mmmm creo que el problema está en la expresión del switch(M), porque M es un char, pero lo que tú le estás pidiendo que introduzca al usuario es un String, además que no escaneas en ningún sitio lo que tiene que escribir el usuario.

Prueba declarando un string, y luego metiendole un valor introducido por teclado (La elección que se quiera del menu) y luego lo pones en el swith.

Lo declaras como : string nombreString;
Luego despues del último System.out.println pones escaneas la opción de desean elegir así : nombreString = scan.nextLine(); (habiendo importado el escaner antes y todo eso)
Y ya en el switch pones: switch(nombreString){...}


Pruebalo y me dices si te ha solucionado el problema, creo que será así... Si estoy equivocado que me corrija alguien :)

Un saludo.
«La suerte es el cuidado de los detalles». -Winston Churchill

Ayram7

Coincido con Baal_30
Pides que escriban toda la opción (para lo que deberías hacer switch a un String en lugar de un char).

Te sugiero dos cosas:

La primera. Haz switch a los números (int)
Es más rápido para el usuario y no tienes que teclear tanto.

Segundo.

En lugar de usar tantos System.out.println podrías colocar todo eso en uno solo usando el salto de linea \n

Quedaría así:

Código (java) [Seleccionar]
System.out.println("*Menu*\n\n1.-DIVISION\n2.-ORDEN\n3.-SERIES PAR_IMPAR\n4.-SERIE PRIMO");

Te ahorras mucho código.

milx86

Aqui te dejo un code que siempre uso,
Código (java) [Seleccionar]

import java.util.Scanner;

public class testPila {

    public static void main(String[] args) {
       
        Scanner entrada = new Scanner(System.in);
        Pila miStack = new Pila();
       
        int op,nro;
        do{
            System.out.println("\t***************************************");
            System.out.println("\t             Pila dinamica             ");
            System.out.println("\t***************************************");
            System.out.println("\t 1. Apilar elemento                    ");
            System.out.println("\t 2. Desapilar elemento                 ");
            System.out.println("\t 3. Mostrar Pila                       ");
            System.out.println("\t 4. Vaciar Pila                        ");
            System.out.println("\t 5. Salir                              ");
            System.out.println("\t***************************************");
            System.out.print("\tIngrese una opcion: ");
            op = entrada.nextInt();
           
            switch(op){
                case 1: System.out.print("\tApilar nro: ");
                        nro = entrada.nextInt();
                        miStack.insertar(nro);
                        break;
                case 2: miStack.quitar();
                        break;
                case 3: System.out.println("\tPila tam: "+miStack.getTam());
                        miStack.mostrarPila();
                        break;
                case 4: miStack.limpiarPila();
                        System.out.println("\tPila vacia: "+miStack.pilaVacia());
                        break;
                case 5: System.out.println("\tGood bye!");
                        break;
                default:
                    System.out.println("\t[msgError]: Opcion no valida.");
            }
           
        }while(op!=5);   
    }
}

Sería cuestion de cambiar el codigo en los case y modificar las opciones en los println.
Saludos  :)
La abstracción es la clave para lidiar con la complejidad.