Saltar al contenido principal

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 if cuando los casos deben ser excluyentes;
  • ordenar mal los rangos y volver inalcanzable una rama;
  • comparar textos con ==. Para el contenido de un String, usa texto.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.