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");
}
switchevalúa una expresión una vez.- cada
caserepresenta un valor posible; breaksale delswitchal terminar el caso;defaultatiende 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?
- Comprobar si una edad es mayor o igual que 18.
- Elegir entre las opciones numeradas 1, 2 y 3.
- Comprobar si un precio supera 50 euros.
- Elegir un canal entre
email,chatytelefono.
Solución razonada:
if, porque comprobamos un rango medianteedad >= 18.switch, porque comparamos una misma opción con valores concretos.if, porque expresamos una comparación,precio > 50.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.