Java – El operador ternario ?

Por poco que hayas tocado Java seguro que estás acostumbrado al uso de la estructura condicional if … else :

Pues existe una manera alternativa de escribir estas sentencias if…else tan cortas, que las abrevia incluso más: usando el operador ternario ?. La sintaxis es la siguiente:

Y se interpretaría diciendo que si expresion1 es verdadero, entonces se evalua expresion2, y de lo contrario se evalua expresion3

Repitamos el ejemplo cambiando la estructura if-else por el operador ternario ?:

Como ves, en una única línea asignamos a la variable k el valor que le correspondería dependiendo de si i es negativa o es positiva. Y hemos reducido el número de líneas de código a la mitad.

¡Hasta la próxima!

Java Snippet – Pedir confirmación antes de salir en cuadro de diálogo

Ya sabemos que para salir de una aplicación Java podemos usar:

Pero puede que no sepas que con muy poquito código más puedes ofrecer al usuario una salida del programa mucho más elegante, mostrándole un simple cuadro de diálogo en el que él pueda decidir si efectivamente desea terminar la ejecución de nuestra aplicación o si por el contrario se lo ha pensado mejor y prefiere seguir trabajando en ella.

El código a utilizar sería el siguiente:

Mostrar cuadro de diálogo pidiendo confirmación (Aceptar – Cancelar)

Como te habrás percatado ya, hacemos uso de un JOptionPane, así que deberás importarlo (si usas un IDE como Eclipse o IntelliJIdea lo habrán hecho por ti):

La próxima semana, más 🙂

Java Snippet – Comprobar los tipos de datos

A veces resulta necesario comprobar los tipos de datos para evitar errores. De hecho, durante mis estudios desarrollé estas pequeñas funciones para comprobarlo de forma sencilla y rápida. Estas funciones reciben siempre un dato tipo string, intentan convertirlo al tipo de dato que nos interesa comprobar, y devuelven verdadero o falso según sea el caso.

Comprobar si es un entero

Comprobar si es un flotante

Uso de las funciones

Evidentemente, siguiendo este esquema puedes crear las funciones necesarias para cualquier otro tipo de dato.

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:

Java – Ejercicio: Calcular letra NIF

Ejercicio clásico donde las haya, muy útil para practicar cuando se dan los primeros pasos en cualquier lenguaje de programación. En este caso, como ya habrás adivinado, lo vamos a realizar usando en Java. Con él veremos cómo recibir datos desde la consola y cómo llamar a funciones. Usaremos el operador módulo (%).

El algoritmo para calcular la letra del NIF

El algoritmo usado simplemente consiste en dividir el DNI (la parte numérica) entre 23. El resto obtenido será un entero que estará asociado a la letra que queremos obtener. Para calcular el resto de la división se usa el operador módulo (%).

La relación “resto – letra” es la siguiente:

Estructura del programa

En este ejemplo vamos a seguir la siguiente estructura:

  1. Escribir un método llamado calculaLetra que recibirá como parámetro un dni de tipo entero. Este método calculará el resto de dividir dni entre 23 y devolverá la letra correspondiente.
  2. Escribir un método llamado esEnteroPositivo que recibirá como parámetro una cadena. Intentará convertirla a entero. Si lo consigue, comprobará que sea mayor que 0, en cuyo caso devolverá true. En cualquier otro caso devolverá false.
  3. En el método main pediremos al usuario que introduzca un dni (sin letra) a través de la consola. Si el dni introducido es entero y positivo, calcularemos la letra correspondiente y la mostraremos por consola. En cualquier otro caso, mostraremos un mensaje indicándolo.

Código del programa

Puedes descargar el código desde mi cuenta en GitHub. Ya sabes que espero tus comentarios 🙂

Java Snippet – Arrays

¿Cuántas veces has intentado trabajar con arrays y no has acertado en su decalaración o en su uso? Esto suele suceder sobre todo si trabajas con varios lenguajes de programación al mismo tiempo.

En este post te muestro dos maneras distintas de trabajar con información guardada en arrays en el lenguaje Java.

Declaración y asignación en una única línea

Declaración y asignación de elementos uno a uno

Como verás, la principal diferencia es que usando el primero de los métodos arriba mencionados no hace falta indicar el tamaño del array.

Acceder a las distintas posiciones del array

Java Snippet – Recibir datos desde consola con Scanner

Con la clase Scanner podemos recibir datos por parte del usuario desde la consola de una forma muy sencilla.