Instrucción de control alternativa múltiple (switch) en Java
EJEMPLO { DiaDeLaSemana } Se quiere escribir un programa que solicite por teclado el número (dato entero) de un día de la semana y, luego, muestre por pantalla el nombre (dato cadena) de dicho día. Ahora bien, si el número que se introduce es menor que 1 ó mayor que 7, en pantalla se mostrará el mensaje "ERROR: Día incorrecto". Al ejecutar dicho programa, en la pantalla se visualizará:
El siguiente código fuente escrito en Java, es una posible solución:
import java.util.Scanner;
public class DiaDeLaSemana
{
public static void main(String[] args)
{
int dia;
Scanner teclado = new Scanner(System.in);
System.out.printf("Introduzca día de la semana: ");
dia = teclado.nextInt();
switch(dia)
{
case 1: System.out.printf("Lunes");
break;
case 2: System.out.printf("Martes");
break;
case 3: System.out.printf("Miércoles");
break;
case 4: System.out.printf("Jueves");
break;
case 5: System.out.printf("Viernes");
break;
case 6: System.out.printf("Sábado");
break;
case 7: System.out.printf("Domingo");
break;
default: System.out.printf("ERROR: Día incorrecto.");
}
}
}
Como se puede apreciar, se ha utilizado una instrucción alternativa switch, la cual posibilita seleccionar el siguiente bloque de instrucciones que se tiene que ejecutar, en función del valor de una expresión (en este caso dia). Por ejemplo, cuando dia vale 4, se ejecuta la instrucción:
System.out.printf("Jueves");
Al final de cada bloque de instrucciones, hay que escribir una instrucción break. De no ser así, se seguirían ejecutando el resto de instrucciones hasta llegar a la llave } que cierra el bloque del switch.
Por otra parte, véase que si el valor de dia no es ninguno de los case indicados (números enteros del 1 al 7) se ejecuta el bloque de instrucciones escrito después de default:.
Anidamiento de un switch en un if
El problema anterior planteado, también se puede resolver anidando la instrucción switch dentro de un if, como se muestra a continuación:
import java.util.Scanner;
public class DiaDeLaSemana2
{
public static void main(String[] args)
{
int dia;
Scanner teclado = new Scanner(System.in);
System.out.printf("Introduzca día de la semana: ");
dia = teclado.nextInt();
if(dia>=1 && dia<=7)
{
// Inicio del anidamiento
switch(dia)
{
case 1: System.out.printf("Lunes");
break;
case 2: System.out.printf("Martes");
break;
case 3: System.out.printf("Miércoles");
break;
case 4: System.out.printf("Jueves");
break;
case 5: System.out.printf("Viernes");
break;
case 6: System.out.printf("Sábado");
break;
case 7: System.out.printf("Domingo");
}
// Fin del anidamiento
}
else
{
System.out.printf("ERROR: Día incorrecto.");
}
}
}
Fíjese que, en esta solución, no es necesario escribir el caso default en el switch.