Booleanos y condicionales
Un programa interactivo no debería responder siempre igual. Para decidir necesita preguntas cuyo resultado sea true o false.
Expresiones booleanas
int edad = 20;
boolean esMayorDeEdad = edad >= 18;
boolean tieneEntrada = true;
Las comparaciones >, <, >=, <=, == y != producen valores booleanos. Recuerda: = asigna y == compara.
Podemos combinar condiciones:
boolean puedeEntrar = esMayorDeEdad && tieneEntrada;
boolean tieneDescuento = edad < 18 || edad >= 65;
boolean entradaAgotada = !tieneEntrada;
&&: ambas condiciones deben ser verdaderas.||: basta con que una sea verdadera.!: invierte el resultado.
Usa paréntesis cuando aclaren una condición combinada.
Ejecutar solo cuando se cumple una condición
if (puedeEntrar) {
System.out.println("Acceso permitido");
}
El bloque se ejecuta únicamente si la condición vale true.
Mini práctica: if
Con int puntos = 8, ¿se muestra el mensaje de este bloque?
if (puntos >= 10) {
System.out.println("Nivel superado");
}
Solución: no. La comparación 8 >= 10 produce false, así que Java omite el bloque.
Elegir entre dos caminos
if (puedeEntrar) {
System.out.println("Acceso permitido");
} else {
System.out.println("Acceso denegado");
}
else representa todos los casos en los que la condición del if es falsa.
Mini práctica: if / else
Completa la condición para mostrar "Disponible" cuando stock sea mayor que cero y "Agotado" en caso contrario.
if (stock > 0) {
System.out.println("Disponible");
} else {
System.out.println("Agotado");
}
Solución razonada: stock > 0 separa exactamente los dos caminos. Con stock = 3 se ejecuta el if; con stock = 0, el else.
Varias franjas excluyentes
if (edad < 0) {
System.out.println("Edad no válida");
} else if (edad < 18) {
System.out.println("Tarifa joven");
} else if (edad >= 65) {
System.out.println("Tarifa sénior");
} else {
System.out.println("Tarifa general");
}
Java prueba de arriba abajo y ejecuta solo la primera rama verdadera. Por eso validamos primero el valor negativo y ordenamos los casos con intención.
Mini práctica: if / else if / else
Clasifica temperatura: por debajo de 10, "Frío"; desde 10 hasta menos de 25, "Templado"; desde 25, "Calor".
if (temperatura < 10) {
System.out.println("Frío");
} else if (temperatura < 25) {
System.out.println("Templado");
} else {
System.out.println("Calor");
}
Solución razonada: al llegar al else if ya sabemos que la temperatura no es menor que 10. No necesitamos repetir ese límite; las ramas son excluyentes y Java ejecuta solo la primera que corresponda.
Decisiones con datos reales
import java.util.Scanner;
public class Acceso {
public static void main(String[] args) {
Scanner entrada = new Scanner(System.in);
System.out.print("Edad: ");
int edad = entrada.nextInt();
System.out.print("¿Tienes entrada? (true/false): ");
boolean tieneEntrada = entrada.nextBoolean();
if (edad >= 18 && tieneEntrada) {
System.out.println("Puedes acceder");
} else {
System.out.println("No puedes acceder");
}
entrada.close();
}
}
Anidar solo si aporta significado
Podríamos comprobar la entrada dentro de un if (edad >= 18), pero edad >= 18 && tieneEntrada expresa esta regla con menos niveles. Reserva la anidación para decisiones que realmente dependan de una decisión anterior.
Una expresión breve: ternario
Para elegir un valor sencillo existe condición ? valorSiVerdadera : valorSiFalsa:
String mensaje = edad >= 18 ? "Adulta" : "Menor";
No reemplaza estructuras con varias instrucciones y no conviene anidarlo.
Errores habituales
- escribir
if (edad = 18)en lugar de comparar; - separar dos
ifcuando los casos deben ser excluyentes; - ordenar mal los rangos y volver inalcanzable una rama;
- comparar textos con
==. Para el contenido de unString, usatexto.equals("valor"); - negar una condición compleja sin paréntesis ni un nombre que explique su propósito.
Práctica: recomendación de tarifa
Pide edad y si la persona es estudiante. Rechaza edades negativas; aplica tarifa reducida a menores de 18 o estudiantes, y general al resto.
Solución razonada:
import java.util.Scanner;
public class Tarifa {
public static void main(String[] args) {
Scanner entrada = new Scanner(System.in);
System.out.print("Edad: ");
int edad = entrada.nextInt();
System.out.print("¿Es estudiante? (true/false): ");
boolean estudiante = entrada.nextBoolean();
if (edad < 0) {
System.out.println("Edad no válida");
} else if (edad < 18 || estudiante) {
System.out.println("Tarifa reducida");
} else {
System.out.println("Tarifa general");
}
entrada.close();
}
}
Prueba -1, 16, 20 con true y 20 con false. Cubren el dato inválido y las tres razones que determinan la salida.
Cuando una decisión compara una misma opción con muchos valores concretos, una cadena de else if empieza a resultar incómoda. La siguiente unidad presenta switch.