Formación informática

Java | Joomla | MySQL

Curso de Java - Tema 28: creación y uso de menús por línea de comandos

Menú por línea de comandos

Una forma sencilla de hacer aplicaciones interactivas es mostrar un menú en la línea de comandos que nos permita elegir qué es lo que queremos hacer mostrando diferentes opciones numéricas, realizando cada una de éstas una acción distinta y concreta. Aunque en la vida profesional puede no ser muy útil, cuándo estamos aprendiendo Java es muy interesante puesto que nos permite crear aplicaciones sencillas. El aspecto sería el siguiente:

run:
1. Sumar
2. Restar
3. Multiplicar
4. Dividir
0. Salir

En un primer paso se explicará el proceso sin tratamiento de excepciones y después se realizará el tratamiento de las mismas. Los dos problemas que pueden surgir con estos menús es que el usuario introduzca una opción de las no permitidas o que introduzca un carácter.

Sin tratamiento de excepciones

El proceso comienza por crear un método llamado menú() que devolverá un número entero correspondiente a la opción elegida y que mostrará las diferentes opciones del menú. A continuación, declaramos en el método principal un bucle do…while en el que usamos el valor devuelto por el método anterior y escribir en un switch anidadado las instrucciones o métodos que se ejecutarán al elegir la opción correspondiente. Tendremos las siguientes condiciones o restricciones:

  • Después de cada opción haya que escribir un break para evitar que se ejecuten el resto de instrucciones.
  • Usaremos el método menú() creado en el paso anterior para devolver la opción elegida por el usuario.
  • En cada caso del switch se pueden escribir instrucciones directamente o usar métodos de la misma o de diferentes clases creadas para hacer uso de la encapsulación. Realizando las importaciones necesarias.
  • La condición para que el bucle se siga ejecutando es que no sea igual a la opción del menú que sale del programa.
  • El switch tendrá un case menos que opciones hay en el método menú.

 La sintaxis genérica es:

static int menu (){
	System.out.println(“1. Texto opción 1”);
	System.out.println(“2. Texto opción 2”);
                       ⋮
	System.out.println(“n. Salir del programa n”);
return teclado.nextInt();
}

public static void main(String[] args) {
        int opcion = 0;
        do {
            opcion = menu();
            switch (opcion) {
                case 1: {
                    instrucciones
                }
                break;
                case 2: {
                    instrucciones
                }
                break;
                    ⋮
                case n-1: {
                    instrucciones
                }
                    break;
            }

        } while (opcion != n);
    }

Con tratamiento de excepciones

La diferencia con el caso anterior es doble:

  • En el método menu() hemos usado un clase envolvente de tipo Integer. Además, hemos tratado la entrada de datos desde el teclado cómo si fuese un texto con el método nextline() y realizado la conversión a número. De esta forma, limpiamos el buffer de entrada de datos y evitamos el error del retorno de carro en algunos casos.
  • En el método principal hemos realizado el tratamiento de excepciones mediante un bloque try-catch que engloba todo el interior del do. Además, hemos añadido dos case extra al switch para mostrar mensajes cuándo no se elige una de las opciones disponibles del menú y cuando salimos de la aplicación. En el catch se muestra el mensaje personalizado cuando se introduce texto.
/*
Aplicacion que devuelve un menú por línea de comandos
*/
package principal;

import java.util.Scanner;

public class Main {

    //Creamos una variable de clase para el usar el escaner en todos los métodos
    private static Scanner teclado = new Scanner(System.in);    

    public static void main(String[] args) {

        int opcion = -1;

        do {
            try {
                opcion = menu();
                switch (opcion) {
                    case 1:
                        break;
                    case 2:
                        break;
                    case 3:
                        break;
                    case 4:
                        break;
                    case 0:
                        System.out.println("Mensaje personalizado de despedida");
                        break;
                    default:
                        System.out.println("Mensaje personalizado para opción incorrecta");
                        break;
                }

            } catch (Exception ex) {
                System.out.println("Mensaje personalizado en caso de introducir texto.");
            }

        } while (opcion != 0);

    }

    /**
     * Método que devuelve la opción del menú elegida
     * @return Número entero equivalente a opción elegida
     */
    public static int menu() {
        int opcion = -1;
        System.out.println("1. Texto.");
        System.out.println("2. Texto.");
        System.out.println("3. Texto");
        System.out.println("4. Texto");
        System.out.println("0. Salir");
        opcion = Integer.parseInt(teclado.nextLine());
        return opcion;
    }
}
Curso de Java - Tema 27: tratamiento de excepciones | Curso de Java - Tema 29: lectura y escritura en ficheros de texto
Curso de Java - Índice Ejercicios Nivel Medio

Escribir un comentario

Aunque los comentarios no expresan la opinión del administrador del sitio web, éste si que tiene una responsabilidad legal sobre lo que aparece. Por lo tanto, habrá una labor de moderación de los mensajes. No se permitirán mensajes ofensivos ni publicidad


Código de seguridad
Refescar

Solicitamos su permiso para obtener datos estadísticos de su navegación en esta web, en cumplimiento del Real Decreto-Ley 13/2012, de 30 de marzo. Si continúa navegando consideramos que acepta el uso de cookies. . Más información