Java Snippet – Menús en consola con switch/case

Con la estructura switch/case podemos indicar a nuestro programa que realice diferentes acciones en función del valor que tome una variable dada. Lo veremos mucho más claro con el siguiente ejemplo.

Qué hará nuestra aplicación

Esta aplicación está basada en un ejercicio que hicimos en primer curso. Simula las operaciones que se pueden realizar en un banco, como abrir o eliminar una cuenta, ingresar o reintegrar dinero, etc… Aunque para clase utilicé una interfaz gráfica en Swing, en este caso me interesa presentarlo todo por consola, para mostrar claramente el funcionamiento del menú usando switch/case. Además, he empleado ArrayLists e Iteradores, de los que ya hablé anteriormente..

Cuando se ejecute la aplicación, el menú será el siguiente:


He estructurado el programa en 2 clases:

  • Cuenta: Esta clase contiene los atributos (titular, id, saldo) y métodos (setters y getters) de una cuenta bancaria.
  • Banco: Esta clase muestra el menú de opciones y ejecuta las acciones.

Para no hacer el post demasiado extenso no voy a incluir el código completo, sino que he preferido colgarlo en mi cuenta de github. Puedes dirigirte a este enlace o clonar el repositorio directamente con el comando:

Objetos necesarios

En la clase Banco he creado los siguientes objetos, a los que voy a acceder desde diferentes puntos del programa:

La función mostrarMenu()

Esta función simplemente muestra por pantalla cada una de las opciones del menú. El usuario introducirá un string que luego pasaremos como parámetro al llamar a la función ejecutarAccion(). En lugar de un string puedes forzar a que el usuario introduzca un entero, por ejemplo, pero un string te da más versatilidad. En este caso, por ejemplo, para salir del programa espero a que el usuario introduzca una “X“.

Como ves, el valor que introduce el usuario lo guardo en el string “opcion” usando el método .next() del objeto Scanner (sc) creado justo al principio del programa. Como veremos después, el objeto sc lo cerraremos cuando el usuario elija la opción “X. Salir“.

La función ejecutarAccion(String accion)

Esta función recibe como parámetro la opción introducida por el usuario anteriormente. Lo primero que hago es convertir esta cadena a mayúsculas (si introduce cualquier otro caracter no se produce ningún error). A continuación, usando la cláusula switch/case especifico qué debe ejecutarse en cada caso.

La sintaxis de esta cláusula es la siguiente:

Creo que queda bastante claro. Dependiendo del valor que tome la variable “opcion” se ejecutará la acción correspondiente a ese valor. Si “opcion” toma un valor no contemplado, se ejecutarán las acciones dentro del bloque “default“. El comando “break” interrumpe la ejecución del bloque switch.

Como ves en mi código, dentro de cada opción llamo a la función correspondiente, y después vuelvo a mostrar el menú. Excepto cuando el usuario decide salir introduciendo una “X“, en cuyo caso cierro el objeto sc antes de salir.

Java Snippet – ArrayLists e Iteradores

En este post hablé de los arrays en Java, una estructura que nos permitía almacenar datos relacionados. Aunque muy útil, un array cuenta con una importante limitación: es obligatorio declarar su tamaño, la cantidad de elementos que va a almacenar, y siempre deberemos ceñirnos a este tamaño.

Sin embargo, en infinidad de ocasiones nos encontraremos con la necesidad de utilizar un sistema de almacenamiento de información dinámico, es decir, que nos permita añadir o eliminar elementos a nuestro antojo, o simplemente un sistema en el que no tengamos que conocer de antemano cuántos elementos vamos a almacenar en él.

Para solucionar esto, en java disponemos de los ArrayList, que nos permiten almacenar cualquier número de elementos en ellos, y además estos elementos pueden ser objetos, con sus respectivas propiedades y métodos.

Veamos a continuación cómo trabajar con ArrayLists en Java.

ArrayLists

Por ejemplo, imaginemos que tenemos un ArrayList que almacenará objetos de tipo Cuenta. Cada objeto de tipo Cuenta tiene 3 propiedades distintas: propietario, idCuenta y saldo. Además, para acceder a cada una de estas propiedades, la Clase Cuenta tiene definidos los correspondientes métodos getters y setters (getPropietario(), getIdCuenta(), getSaldo(), setPropietario(), setIdCuenta() y setSaldo()).

El código de más arriba lo podríamos aplicar así:

Iteradores para trabajar con ArrayLists

Un iterador, como su propio nombre sugiere, es un mecanismo más eficaz para recorrer los elementos de un arrayList que un simple bucle for, por ejemplo. A continuación vemos las aplicaciones más comunes y útiles de un iterador para trabajar con ArrayLists.

Actualización: Ejemplo completo en github

Puedes dirigirte a este enlace o clonar el repositorio directamente con el comando: