Las estructuras if y switch permiten que tu programa tome decisiones y ejecute diferentes bloques de código según una condición.
Sin estas estructuras, un programa siempre haría lo mismo. Con ellas, puedes validar datos, clasificar productos o asignar turnos de trabajo.
La estructura if, else if y else
El if evalúa una condición booleana. Si la condición es true, ejecuta el bloque de código entre llaves.
Sintaxis base:
if (condición) {
// código si la condición es verdadera
} else if (otraCondición) {
// código si la segunda condición es verdadera
} else {
// código si ninguna condición fue verdadera
}
La condición debe devolver true o false. Puedes usar los operadores de comparación y lógicos que aprendiste en la lección anterior.
Ejemplo 1: Clasificar un precio en Liverpool
Imagina que trabajas en el área de e-commerce de Liverpool. Quieres clasificar un producto según su precio.
double precio = 1500;
if (precio < 500) {
System.out.println("Categoría: Económico");
} else if (precio >= 500 && precio < 2000) {
System.out.println("Categoría: Estándar");
} else {
System.out.println("Categoría: Premium");
}
Resultado en consola:
Categoría: Estándar
El programa evalúa cada condición en orden. En cuanto una es true, ejecuta ese bloque y salta los demás.
Ejemplo 2: Validar el salario mínimo en una empresa
Supón que un sistema de FEMSA verifica si el salario de un empleado cumple con el mínimo aceptado por la empresa ($12,000).
double salario = 9500;
if (salario >= 12000) {
System.out.println("Salario válido.");
} else {
System.out.println("Salario por debajo del mínimo aceptado.");
}
Resultado en consola:
Salario por debajo del mínimo aceptado.
Este tipo de validación es común en sistemas de nómina conectados al IMSS. Un valor incorrecto puede generar errores en las aportaciones.
Ejemplo 3: Anidar condiciones
Puedes colocar un if dentro de otro if. Esto se llama anidamiento.
boolean estaActivo = true;
double salario = 18500;
if (estaActivo) {
if (salario >= 15000) {
System.out.println("Empleado activo con salario alto.");
} else {
System.out.println("Empleado activo con salario estándar.");
}
} else {
System.out.println("Empleado inactivo.");
}
Resultado en consola:
Empleado activo con salario alto.
Usa el anidamiento con cuidado. Demasiados niveles hacen el código difícil de leer.
La estructura switch
El switch es ideal cuando tienes un valor fijo y quieres ejecutar código diferente para cada caso posible. Es más limpio que encadenar muchos else if.
Sintaxis base:
switch (variable) {
case valor1:
// código para valor1
break;
case valor2:
// código para valor2
break;
default:
// código si ningún caso coincide
}
La palabra break es fundamental. Sin ella, el programa "cae" al siguiente caso y lo ejecuta también.
El bloque default es opcional, pero es buena práctica incluirlo para manejar valores inesperados.
Ejemplo 4: Asignar turno de trabajo en Bimbo
En una planta de Bimbo, los empleados tienen tres turnos: matutino, vespertino y nocturno. Un sistema recibe el número de turno y muestra el horario.
int turno = 2;
switch (turno) {
case 1:
System.out.println("Turno matutino: 6:00 a 14:00");
break;
case 2:
System.out.println("Turno vespertino: 14:00 a 22:00");
break;
case 3:
System.out.println("Turno nocturno: 22:00 a 6:00");
break;
default:
System.out.println("Turno no reconocido.");
}
Resultado en consola:
Turno vespertino: 14:00 a 22:00
Cada case corresponde a un valor exacto de la variable turno.
Ejemplo 5: Clasificar categoría de vendedor en Mercado Libre
Mercado Libre clasifica a sus vendedores en niveles: Clásico, Plata, Oro y Platino. Un sistema interno recibe la categoría como texto.
String categoria = "Oro";
switch (categoria) {
case "Clásico":
System.out.println("Sin beneficios adicionales.");
break;
case "Plata":
System.out.println("Descuento en comisiones del 5%.");
break;
case "Oro":
System.out.println("Descuento en comisiones del 10% y soporte prioritario.");
break;
case "Platino":
System.out.println("Descuento del 15%, soporte 24/7 y exposición destacada.");
break;
default:
System.out.println("Categoría desconocida.");
}
Resultado en consola:
Descuento en comisiones del 10% y soporte prioritario.
Desde Java 7, switch acepta String. Antes solo aceptaba enteros y caracteres.
Comparación: if vs switch
| Característica | if / else if |
switch |
|---|---|---|
| Tipo de condición | Cualquier expresión booleana | Valor exacto (int, char, String, enum) |
Rangos (>, <) |
✅ Sí | ❌ No |
| Múltiples valores fijos | Posible pero verboso | ✅ Más limpio |
| Legibilidad con muchos casos | Disminuye con más else if |
Alta con muchos case |
Requiere break |
No | Sí (en la mayoría de los casos) |
Usa if cuando necesites comparar rangos o condiciones complejas. Usa switch cuando compares un valor exacto contra varias opciones.
Errores comunes
1. Olvidar el break en switch
Sin break, Java ejecuta todos los case que siguen al que coincidió. Esto se llama fall-through.
int turno = 1;
switch (turno) {
case 1:
System.out.println("Matutino");
// falta break
case 2:
System.out.println("Vespertino");
break;
}
Resultado incorrecto:
Matutino
Vespertino
Agrega break al final de cada case para evitar este error.
2. Usar == para comparar Strings en if
Recuerda la lección anterior: nunca uses == para comparar texto en un if.
// ❌ Incorrecto
if (categoria == "Oro") { ... }
// ✅ Correcto
if (categoria.equals("Oro")) { ... }
Nota: dentro de switch, Java maneja la comparación de Strings internamente, así que ahí sí puedes escribir case "Oro": sin problema.
3. Condiciones con asignación en lugar de comparación
Este error es muy frecuente en principiantes.
int stock = 0;
// ❌ Incorrecto: asigna 5 a stock en lugar de comparar
if (stock = 5) { ... }
// ✅ Correcto
if (stock == 5) { ... }
Java lanzará un error de compilación en este caso, lo cual te ayuda a detectarlo rápido.
4. No cubrir todos los casos posibles
Si omites el else o el default, tu programa puede no hacer nada ante un valor inesperado. Siempre incluye un caso de salida para valores no contemplados.
Puntos clave
- La estructura
ifevalúa una condición booleana y ejecuta código según el resultado (trueofalse). - Puedes encadenar condiciones con
else ifpara manejar múltiples escenarios. - El
switches más limpio que muchoselse ifcuando comparas un valor exacto contra varias opciones fijas. - Siempre incluye
breaken cadacasedelswitchpara evitar el fall-through. - Usa
ifpara condiciones con rangos; usaswitchpara valores exactos como categorías, turnos o estados.