Saltar al contenido principal

switch y decisiones múltiples

Cuando comparamos una misma opción con muchos valores concretos, una cadena de else if repite trabajo:

if (opcion == 1) {
System.out.println("Ver perfil");
} else if (opcion == 2) {
System.out.println("Editar perfil");
} else if (opcion == 3) {
System.out.println("Cerrar sesión");
} else {
System.out.println("Opción no válida");
}

switch expresa directamente que queremos elegir según el valor de opcion.

Casos, break y default​

switch (opcion) {
case 1:
System.out.println("Ver perfil");
break;
case 2:
System.out.println("Editar perfil");
break;
case 3:
System.out.println("Cerrar sesión");
break;
default:
System.out.println("Opción no válida");
}
  • switch evalúa una expresión una vez.
  • cada case representa un valor posible;
  • break sale del switch al terminar el caso;
  • default atiende cualquier valor no contemplado.

Sin break, la ejecución continúa por los casos siguientes. Este comportamiento se llama fall-through. Puede ser deliberado, pero en código inicial suele ser una fuente de errores.

Agrupar casos conscientemente​

El fall-through puede agrupar valores cuando los casos vacíos dejan clara la intención:

switch (dia) {
case 6:
case 7:
System.out.println("Fin de semana");
break;
default:
System.out.println("Día laborable");
}

Los casos 6 y 7 comparten el mismo bloque. El break evita continuar hacia default.

switch también admite texto​

String plan = "completo";

switch (plan) {
case "basico":
System.out.println("Funciones esenciales");
break;
case "completo":
System.out.println("Todas las funciones");
break;
default:
System.out.println("Plan desconocido");
}

Los textos se comparan respetando mayúsculas y minúsculas. "Completo" no coincide con "completo".

¿if o switch?​

Usa if cuando trabajes con rangos o condiciones diferentes:

if (edad < 18 || estudiante) { ... }

Usa switch cuando una misma expresión se compare con alternativas discretas:

switch (opcion) { ... }

No fuerces switch para expresar precio > 20 o combinaciones con &&: if comunica mejor esas reglas.

Práctica: elige la estructura​

¿Usarías if o switch en cada situación?

  1. Comprobar si una edad es mayor o igual que 18.
  2. Elegir entre las opciones numeradas 1, 2 y 3.
  3. Comprobar si un precio supera 50 euros.
  4. Elegir un canal entre email, chat y telefono.

Solución razonada:

  1. if, porque comprobamos un rango mediante edad >= 18.
  2. switch, porque comparamos una misma opción con valores concretos.
  3. if, porque expresamos una comparación, precio > 50.
  4. switch, porque elegimos entre varios textos concretos.

La decisión no depende del número de líneas, sino de qué estructura comunica mejor la regla.

Práctica: canal de ayuda​

Pide un canal (email, chat o telefono) y muestra el tiempo de respuesta. Cualquier otro valor debe producir un aviso.

Solución razonada:

import java.util.Scanner;

public class Ayuda {
public static void main(String[] args) {
Scanner entrada = new Scanner(System.in);
System.out.print("Canal: ");
String canal = entrada.nextLine();

switch (canal) {
case "email":
System.out.println("Respuesta en 24 horas");
break;
case "chat":
System.out.println("Respuesta en unos minutos");
break;
case "telefono":
System.out.println("Respuesta inmediata");
break;
default:
System.out.println("Canal no disponible");
}

entrada.close();
}
}

Cada alternativa es un texto concreto, por lo que switch resulta más directo que repetir canal.equals(...).

Diagnóstico​

Si al elegir 1 aparecen también los mensajes de 2 y 3, ¿qué falta?

Solución: falta break al final del caso 1. Java continúa ejecutando los casos posteriores hasta encontrar un break o terminar el switch.

Ya disponemos de dos herramientas para decidir. La siguiente unidad propone problemas donde tendrás que elegir cuál comunica mejor cada regla.