CodeGym /Cursos /JAVA 25 SELF /If anidados, lógica multinivel

If anidados, lógica multinivel

JAVA 25 SELF
Nivel 3, Lección 2
Disponible

1. Sintaxis básica de if anidado

En la vida real rara vez te encuentras con una situación en la que la decisión se tome solo por un criterio. Normalmente hay que comprobar varias condiciones a la vez, y a menudo dependen unas de otras. Por ejemplo, para entrar en un concierto no basta con ser adulto — a veces también tienes que estar en la lista de invitados. Ahí entra en escena la llamada lógica multinivel, y nos ayudan los operadores if anidados.

Las condiciones anidadas son cuando un if vive dentro de otro. Imagina una caja dentro de otra: si se cumple la condición externa, solo entonces se comprueba la interna. Es una herramienta potente de control de flujo.

Empecemos con algo sencillo:

if (conditionA)
{
    // acciones si conditionA es true (verdadero)
    if (conditionB)
    {
        // acciones si ambas condiciones son verdaderas
    }
}
Un if anidado dentro de otro if

Si esto te recuerda a una matrioska — ¡lo has entendido bien! El if interno se ejecutará solo si el externo ha pasado.

Ejemplo: acceso al club

Ampliemos nuestra aplicación de ejemplo, donde el usuario introducía antes su nombre y edad. Ahora añadimos un segundo nivel de comprobación: supongamos que, para entrar en un club privado, hay que ser mayor de 21 años y tener un código de invitación.

System.out.print("Introduzca su nombre: ");
String name = console.nextLine();

System.out.print("Introduzca su edad: ");
int age = console.nextInt();

if (age >= 21)
{
    System.out.print("Introduzca el código de invitación: ");
    String code = console.nextLine();

    if (code.equals("VIP2024"))
    {
        System.out.println("¡Bienvenido, " + name + ", al club VIP!");
    }
    else
    {
        System.out.println("Lo sentimos, código incorrecto. Acceso denegado.");
    }
}
else
{
    System.out.println("Lo sentimos, ¡entrada solo a partir de 21 años!");
}

Ten en cuenta: el if interno comprueba el código solo si la edad ya ha pasado la verificación. Esto ahorra recursos (y los nervios del vigilante).

2. ¿Cuántos niveles de anidamiento son aceptables?

Técnicamente — los que quieras. Pero en la práctica: cuanto más niveles anidados, más difícil leer y mantener el código. Normalmente se intenta limitar a 2–3 niveles. Si te sale una «escalera» de 4+ if anidados, piensa si puedes simplificar la lógica o extraer las comprobaciones a métodos.

Lógica anidada: visualización

3. If y else anidados: trampas y matices

Error común de principiantes: uso descuidado de llaves.

En Java, al usar else rige una regla estricta: sin llaves {}, al if o else solo se le asocia la primera instrucción que le sigue. Es una fuente frecuente de errores molestos.

Ejemplo con error potencial:

if (age >= 21)
    if (code.equals("VIP2024"))
        System.out.println("¡Bienvenido!");
else
    System.out.println("Código incorrecto.");

Muchos esperan que else se refiera a la comprobación de la edad, pero en realidad se refiere al if más cercano que lo precede (la comprobación del código de invitación). Por eso los mensajes pueden mostrarse de manera inesperada. Mejor usa siempre llaves — ¡aunque dentro haya solo una línea!

Para evitar malentendidos, el compilador ve este código así:

if (age >= 21)
{    
    if (code.equals("VIP2024"))
        System.out.println("¡Bienvenido!");
else
    System.out.println("Código incorrecto.");
}    

Importante, una vez más: si en la construcción if-else no se ponen llaves, else se asocia al if anterior (el más cercano a él).

4. Alternativas: else if en condiciones anidadas

A veces, dentro del if externo, quieres no solo comprobar una condición adicional, sino también prever una alternativa. Por ejemplo, si el código de invitación no coincide, se puede ofrecer acceso de invitado o denegarlo.

if (age >= 21)
{
    System.out.print("Introduzca el código de invitación: ");
    String code = console.nextLine();

    if (code.equals("VIP2024"))
    {
        System.out.println("¡Bienvenido al club!");
    }
    else if (code.equals("GUEST"))
    {
        System.out.println("Modo invitado: acceso solo hasta las 23:00.");
    }
    else
    {
        System.out.println("Lamentablemente, el acceso no es posible.");
    }
}
else
{
    System.out.println("Entrada solo a partir de 21 años.");
}

Aquí, dentro de la elección externa, hacemos una elección anidada entre tres escenarios: código VIP, código de invitado y denegación.

5. Práctica: calculadora de descuento con lógica multinivel

Supongamos que al usuario se le aplica un descuento en función de la edad y de si tiene tarjeta del club.

  • Si la edad del usuario es mayor o igual a 60 — descuento del 15 %.
  • Si la edad es menor, pero el usuario tiene tarjeta del club — descuento del 7 %.
  • En los demás casos no hay descuento.

¿Cómo implementarlo?

System.out.print("Introduzca su edad: ");
int age = console.nextInt();

double discount = 0.0;

if (age >= 60)
{
    discount = 0.15;
}
else
{
    System.out.print("¿Tiene tarjeta del club (sí/no)? ");
    String hasCard = console.nextLine();

    if (hasCard.equals("sí"))
    {
        discount = 0.07;
    }
}

System.out.println("Su descuento: " + (discount * 100) + "%");

Aquí hemos usado un if anidado dentro de la rama else: si la edad no cumple, solo entonces preguntamos por la tarjeta.

1
Tarea
JAVA 25 SELF, nivel 3, lección 2
Bloqueada
Control de acceso a la fiesta 🥳
Control de acceso a la fiesta 🥳
1
Tarea
JAVA 25 SELF, nivel 3, lección 2
Bloqueada
Entrada al club 🌃
Entrada al club 🌃
1
Tarea
JAVA 25 SELF, nivel 3, lección 2
Bloqueada
Invitaciones para la conferencia 🎤
Invitaciones para la conferencia 🎤
1
Tarea
JAVA 25 SELF, nivel 3, lección 2
Bloqueada
Programa de fidelidad en la tienda 🛍️
Programa de fidelidad en la tienda 🛍️
Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION