Cómo utilizar un switch en Java

Un switch en Java es una manera de tomar una decisión a partir de un valor dado, con varios resultados posibles. Es sencillo de utilizar, aunque, como siempre, el examen puede tratar de confundirte (no me canso de decirlo 🙂 ).

More...

Estructura de un switch en Java (visualización)

Para entender cómo funciona un switch en Java, te voy a pedir que hagas un pequeño esfuerzo de imaginación.

Imagina que te encuentras en una gran habitación enmoquetada. En la pared, a tu izquierda, hay un cartel que reza:

Opciones

  • Cantidad de monedas que tengas en el bolsillo
  • Lista de la compra
  • Tu nombre

Frente a ti hay cinco puertas, y sobre ellas aparece la siguiente pregunta:

Cruza la puerta que corresponda: ¿cuántas monedas tienes en el bolsillo?

En cada puerta hay un letrero colgado:

5 monedas

10 monedas

15 monedas

20 monedas

Otra cantidad

En este ejemplo, los tres puntos que aparecen en el cartel se corresponden con los tres tipos de valores que se pueden utilizar en un switch en Java: un número entero (byte, short, char o int, junto con sus respectivas clases, de las que hablaré en el próximo artículo), una enumeración o enum (que no entra en el examen de OCA, de manera que no es necesario que, por ahora, sepas qué es) o una cadena de texto (String).

A continuación la pregunta que aparece en la pared es el valor que va a evaluar el switch. Y, en cada puerta, el "camino" que va a tomar la ejecución, dependiendo del valor seleccionado.

Pasamos a ver el código

¡Hay un problema! Como ves, si ejecutas el código del ejemplo se imprimen las cinco frases.

Lo que falla es la manera en la que sales de cada habitación. Tienes dos opciones: salir por una puerta que te lleve a otro lugar, fuera del switch, o cruzar una puerta lateral, que te lleva a la habitación de al lado. Como ves, de manera predeterminada la salida de cada habitación es, precisamente, esa puerta lateral, hasta la última opción, que abandona el switch.

Ejemplo de switch en Java

Un switch con dos cases: 27 y 1725

La puerta de salida de un switch en Java: break

Así pues, vas a cruzar la primera puerta, ya que tienes 5 monedas en el bolsillo. Cruzas la puerta y entras en un despacho pequeño, sin muebles. En el otro extremo, hay una puerta con una única palabra escrita sobre la hoja:

break;

La cruzas, y apareces en un prado. Las habitaciones han quedado atrás.

Como ves, la palabra clave break te permite abandonar el switch una vez se haya ejecutado el código del case. Vamos a complicarlo un poco más.

Las letras del alfabeto en un diccionario son un ejemplo de switch en Java: cuando buscas una palabra, abres el diccionario por la letra inicial.

¡Compártelo!

Cinco puertas, pero tres habitaciones: cases alineados

Imagínate que cruzas la primera puerta (porque, como ya hemos dicho, tienes 5 monedas) y te encuentras que las dos siguientes puertas también dan a esa misma habitación, que es bastante grande.

¿Ves cómo de feos están los cases, alineados? Queda feo, pero es válido, tenlo en cuenta.

default, o ¿y si tengo 13 monedas?

En ese caso, pueden ocurrir dos cosas: que el switch tenga una opción default, o que no la tenga.

Si no la tiene, la ejecución continúa fuera del switch, ya que no existe ninguna opción en el switch que se corresponda con el valor que tenemos, que es, en este caso, 13

La opción default, o "predeterminada" en español, se ejecuta siempre y cuando el resto de cases del switch no se corresponda con el valor que tenemos. Es por eso que la última puerta tenía el letrero de Otra cantidad: si ninguna de las puertas anteriores es la tuya, pasa por aquí.

A tener en cuenta

  • check
    Aunque la opción default suela aparecer la última en un switch, en realidad puede aparecer en cualquier posición.
  • check
    Si no está en última posición, la opción default necesita un break.
  • check
    Si está en la última posición, pasaría igual que con cualquier case: como está al final, la ejecución no "vuelve atrás" a ejecutar el código de los otros cases, sino que abandona el switch y sigue adelante. Es por ello que no es necesario especificar un break.

Valores que puede tomar un case

Como ya te he dicho más arriba, un switch puede funcionar con números enteros, enums y Strings. A continuación te voy a explicar qué valores puede (o no puede) tener un case. Eso sí, dos cosas te digo desde ya:

  • check
    Nunca utilices dos cases con el mismo valor.
  • check
    En los cases, utiliza siempre un valor constante (un número, o un texto entre comillas). No utilices otra variable:

Números enteros

Si el valor que estás utilizando es un número entero, puedes utilizar en el case cualquier valor que se le pueda asignar al primitivo (o a su clase asociada) de ese tipo. Es decir, si utilizas un byte, no puedes utilizar un case con un valor que supere su rango (de -128 a 127. Échale un ojo a este artículo para refrescar la memoria).

Además, puedes utilizar operaciones matemáticas:

¿Recuerdas la diferencia que había entre asignarle a un char el valor 9 y asignarle el valor '9'? Tenlo en cuenta si te encuentras con un switch en el examen.

String

Al igual que con los números enteros, puedes utilizar en el case cualquier texto que puedas asignarle a una referencia de tipo String.

La única diferencia en este caso es que String es un objeto, no una variable primitiva, y, por ello, puede tomar el valor null (que significa, en realidad, que no apunta a ningún objeto). No obstante, tú no puedes utilizar el valor null en un case. Si lo haces, el código no va a compilar:

Ejercicios propuestos

A continuación muestro varios ejemplos de switch "raros" que puedes encontrar en el examen. ¿Puedes deducir cuál va a ser el resultado antes de ejecutarlo? Si el resultado es distinto a lo que esperabas, ¿puedes deducir por qué?

1er jercicio : el espejismo

2º ejercicio: ¿código inaccesible?

A Java no le gusta nada cuando alguna línea de tu código es inaccesible. Si lo intentas, te lanza a la cara un error de compilación. ¿Qué crees entonces que ocurre en este caso?

3er ejercicio: switch sin cuerpo

¿Qué crees que va a pasar con estos switch incorpóreos?

4º ejercicio: las puertas tienen una mirilla

La variable cuatro se declara en un case en el que el hilo de ejecución no accede. ¿Qué ocurre?

¿Qué te han parecido los ejercicios? Si tienes alguna duda, puedes preguntar en los comentarios. ¡Te espero!

Deja una respuesta 0 comentarios