1. Sintaxe básica de if aninhado
Na vida real, raramente você encontra uma situação em que a decisão é tomada com base em um único critério. Normalmente é preciso verificar várias condições ao mesmo tempo, e elas frequentemente dependem umas das outras. Por exemplo, para entrar em um show, não basta ser adulto — às vezes é preciso também estar na lista de convidados. É aí que entra a chamada lógica multinível, e os operadores if aninhados nos ajudam nisso.
Condições aninhadas são quando um if vive dentro de outro. Imagine uma caixa dentro de outra: se a condição externa for satisfeita, só então a interna é verificada. É uma ferramenta poderosa de controle de fluxo.
Vamos começar pelo simples:
if (uslovieA)
{
// ações, se uslovieA — true (verdadeiro)
if (uslovieB)
{
// ações, se ambas as condições forem verdadeiras
}
}
if aninhado dentro de outro
if
Se isso lhe lembra uma matryoshka — você entendeu corretamente! O if interno será executado somente se o externo tiver sido acionado.
Exemplo: entrada no clube
Vamos evoluir nosso aplicativo didático, em que o usuário já inseriu nome e idade. Agora vamos adicionar um segundo nível de verificação: suponha que, para entrar em um clube fechado, é preciso ter mais de 21 anos e possuir um código de convite.
System.out.print("Digite seu nome: ");
String name = console.nextLine();
System.out.print("Digite sua idade: ");
int age = console.nextInt();
if (age >= 21)
{
System.out.print("Digite o código de convite: ");
String code = console.nextLine();
if (code.equals("VIP2024"))
{
System.out.println("Bem-vindo, " + name + ", ao clube VIP!");
}
else
{
System.out.println("Desculpe, código inválido. Acesso negado.");
}
}
else
{
System.out.println("Desculpe, entrada apenas a partir de 21 anos!");
}
Observe: o if interno verifica o código somente se a idade já tiver passado pela verificação. Isso economiza recursos (e os nervos do segurança).
2. Quantos níveis de aninhamento são aceitáveis?
Tecnicamente — quantos você quiser. Mas, na prática: quanto mais níveis de aninhamento, mais difícil é ler e manter o código. Normalmente tenta-se limitar a 2–3 níveis. Se surgir uma “escadinha” de 4+ if aninhados, pense se não dá para simplificar a lógica ou extrair as verificações para métodos.
3. If e else aninhados: armadilhas e nuances
Erro comum de iniciantes: uso descuidado de chaves.
Em Java, ao usar else, existe uma regra rígida: sem chaves {}, apenas o primeiro comando após if ou else a eles pertence. Isso é uma fonte frequente de bugs irritantes.
Exemplo com potencial erro:
if (age >= 21)
if (code.equals("VIP2024"))
System.out.println("Bem-vindo!");
else
System.out.println("Código inválido.");
Muitos esperam que o else pertença à verificação da idade, mas na verdade ele pertence ao if mais próximo antes dele (a verificação do código de convite). Por isso, as mensagens podem ser exibidas de forma diferente do esperado. É melhor sempre usar chaves — mesmo que haja apenas uma linha dentro!
Para não haver ambiguidades, o compilador enxerga esse código assim:
if (age >= 21)
{
if (code.equals("VIP2024"))
System.out.println("Bem-vindo!");
else
System.out.println("Código inválido.");
}
Importante! Mais uma vez: se em uma construção if-else as chaves não forem colocadas, o else pertence ao if anterior (o mais próximo).
4. Alternativas: else if em condições aninhadas
Às vezes, dentro do if externo, você não quer apenas verificar uma condição adicional, mas também prever uma alternativa. Por exemplo, se o código de convite não servir, é possível oferecer acesso de visitante ou negar.
if (age >= 21)
{
System.out.print("Digite o código de convite: ");
String code = console.nextLine();
if (code.equals("VIP2024"))
{
System.out.println("Bem-vindo ao clube!");
}
else if (code.equals("GUEST"))
{
System.out.println("Modo visitante: acesso apenas até 23:00.");
}
else
{
System.out.println("Infelizmente, o acesso não é possível.");
}
}
else
{
System.out.println("Entrada apenas a partir de 21 anos.");
}
Aqui, dentro da seleção externa, fazemos uma seleção aninhada entre três cenários: código VIP, código de visitante e recusa.
5. Prática: calculadora de desconto com lógica multinível
Vamos conceder um desconto ao usuário com base na idade e na existência de um cartão do clube.
- Se a idade do usuário for maior ou igual a 60 — desconto de 15 %.
- Se a idade for menor, mas o usuário tiver cartão do clube — desconto de 7 %.
- Nos demais casos, não há desconto.
Como implementar isso?
System.out.print("Digite sua idade: ");
int age = console.nextInt();
double discount = 0.0;
if (age >= 60)
{
discount = 0.15;
}
else
{
System.out.print("Você tem cartão do clube (sim/não)? ");
String hasCard = console.nextLine();
if (hasCard.equals("sim"))
{
discount = 0.07;
}
}
System.out.println("Seu desconto: " + (discount * 100) + "%");
Aqui usamos um if aninhado dentro do ramo else: se a idade não passou, só então perguntamos sobre o cartão.
GO TO FULL VERSION