1. El operador de opción múltiple:switch

Java tiene otro operador interesante que heredó de su abuelo (C++). Estamos hablando de la switchdeclaración. También podríamos llamarlo un operador de opción múltiple. Parece un poco engorroso:

switch(expression)
{
   case value1: code1;
   case value2: code2;
   case value3: code3;
}

Una expresión o variable se indica entre paréntesis. Si el valor de la expresión es value1, la máquina Java comienza a ejecutarse code1. Si la expresión es igual a value2, la ejecución salta a code2. Si la expresión es igual a value3, entonces code3se ejecuta.

Ejemplo:

Código Salida de consola
int temperature = 38;

switch(temperature)
{
   case 36: System.out.println("Low");
   case 37: System.out.println("Normal");
   case 38: System.out.println("High");
}
High

2. breakdeclaración enswitch

Una característica importante de una switchdeclaración es que el programa simplemente salta a la línea requerida (al bloque de código requerido) y luego ejecuta todos los bloques de código hasta el final del switch. No solo el bloque de código correspondiente al valor en switch, sino todos los bloques de código hasta el final de switch.

Ejemplo:

Código Salida de consola
int temperature = 36;

switch(temperature)
{
   case 36: System.out.println("Low");
   case 37: System.out.println("Normal");
   case 38: System.out.println("High");
}
Low
Normal
High

Dada una temperatura de 36, el programa ingresará la switchdeclaración, saltará y ejecutará el primer bloque de código (el primer caso), y luego ejecutará alegremente el resto de los bloques de código.

Si desea ejecutar solo un bloque de código , el bloque de código asociado con el caso coincidente, debe finalizar el bloque con una breakdeclaración;

Ejemplo:

Código Salida de consola
int temperature = 36;

switch(temperature)
{
   case 36:
      System.out.println("Low");
      break;
   case 37:
      System.out.println("Normal");
      break;
   case 38:
      System.out.println("High");
}
Low

Puede omitir the breaken el último caso de la switchsentencia, ya que ese bloque es el último con o sin sentencia break.


3. Acción predeterminada:default

Otro punto importante. ¿Qué sucede si ninguno de los casos enumerados en el switchcoincide con la expresión entre paréntesis?

Si no se encuentra un caso coincidente, se omite el resto de la switchinstrucción y el programa continuará ejecutándose después de la llave que finaliza la switchinstrucción.

Dicho esto, también puede hacer que una switchdeclaración se comporte como la rama else en una if-elsedeclaración. Para hacer esto, use la defaultpalabra clave.

Si ninguno de los cases en el switchbloque coincide con el valor de la expresión y switchtiene un defaultbloque, se ejecutará el bloque predeterminado. Ejemplo:

Código Salida de consola
int temperature = 40;
switch(temperature)
{
   case 36:
      System.out.println("Low");
      break;
   case 37:
      System.out.println("Normal");
      break;
   case 38:
      System.out.println("High");
      break;
   default:
      System.out.println("Call an ambulance");
}
Call an ambulance

4. Comparar switchyif-else

La switchdeclaración es algo similar a una if-elsedeclaración, solo que más complicada.

Siempre puede reescribir el código de una switchdeclaración como ifdeclaraciones múltiples. Ejemplo:

Código con interruptor Codificar con if-else
int temperature = 40;
switch(temperature)
{
   case 36:
      System.out.println("Low");
      break;
   case 37:
      System.out.println("Normal");
      break;
   case 38:
      System.out.println("High");
      break;
   default:
      System.out.println("Call an ambulance");
}
int temperature = 40;

if (temperature == 36)
{
   System.out.println("Low");
}
else if (temperature == 37)
{
   System.out.println("Normal");
}
else if (temperature == 38)
{
   System.out.println("High");
}
else
{
   System.out.println("Call an ambulance");
}

El código de la izquierda funcionará exactamente igual que el código de la derecha.

Es preferible una cadena de if-elsedeclaraciones múltiples cuando una ifdeclaración contiene varias expresiones complejas en cada caso por separado.



5. ¿Qué expresiones se pueden utilizar en un switchenunciado?

No todos los tipos se pueden usar como caseetiquetas en una switchdeclaración. Puede utilizar literales de los siguientes tipos:

  • tipos enteros: byte, short, int,long
  • char
  • String
  • cualquier enumtipo

No puede utilizar ningún otro tipo como etiquetas de casos.

Ejemplo de uso de un enumdentro de una switchdeclaración:

Day day = Day.MONDAY;
switch (day)
{
   case MONDAY:
      System.out.println("Monday");
      break;
   case TUESDAY:
      System.out.println("Tuesday");
      break;
   case WEDNESDAY:
      System.out.println("Wednesday");
      break;
   case THURSDAY:
      System.out.println("Thursday");
      break;
   case FRIDAY:
      System.out.println("Friday");
      break;
   case SATURDAY:
      System.out.println("Saturday");
      break;
   case SUNDAY:
      System.out.println("Sunday");
      break;
}

Nota: si usa una instrucción enumdentro de una switchdeclaración, no necesita escribir el nombre de la clase delante de cada valor en las caseetiquetas. Basta con escribir el valor.