AFF Education Construa seu Futuro

Aula 39 - Condição if-else if

Estrutura if-else if-else em Detalhes

A estrutura if-else if-else permite avaliar múltiplas condições em sequência, executando o bloco correspondente à primeira condição verdadeira. Esta aula focará em exemplos práticos e detalhados do uso desta estrutura.

Condição 1
↓ Verdadeira     Falsa ↘
Bloco 1
      ↓
Condição 2
↓ Verdadeira     Falsa ↘
Bloco 2
      ↓
...
      ↓
Bloco else (opcional)

Exemplo 1: Classificação de Notas

Este exemplo classifica a nota de um aluno em conceitos utilizando if-else if-else:

public class ClassificacaoNotas {
    public static void main(String[] args) {
        // Nota do aluno
        double nota = 7.5;
        
        // Exibindo a nota
        System.out.println("Nota: " + nota);
        
        // Classificando a nota em conceitos
        System.out.print("Conceito: ");
        
        if (nota >= 9.0) {
            System.out.println("A - Excelente");
        } else if (nota >= 8.0) {
            System.out.println("B - Muito bom");
        } else if (nota >= 7.0) {
            System.out.println("C - Bom");
        } else if (nota >= 6.0) {
            System.out.println("D - Regular");
        } else if (nota >= 5.0) {
            System.out.println("E - Em recuperação");
        } else {
            System.out.println("F - Reprovado");
        }
        
        // Verificando se o aluno foi aprovado ou reprovado
        if (nota >= 6.0) {
            System.out.println("Situação: Aprovado");
        } else if (nota >= 5.0) {
            System.out.println("Situação: Em recuperação");
        } else {
            System.out.println("Situação: Reprovado");
        }
    }
}

Nota: 7.5

Conceito: C - Bom

Situação: Aprovado

Observação: Neste exemplo, o Java avalia as condições em ordem. Quando encontra a primeira condição verdadeira (nota >= 7.0), executa o bloco correspondente e ignora todas as condições seguintes.

Exemplo 2: Calculadora de IMC

O Índice de Massa Corporal (IMC) é calculado dividindo o peso (em kg) pelo quadrado da altura (em metros). A classificação do IMC usa uma estrutura if-else if-else:

public class CalculadoraIMC {
    public static void main(String[] args) {
        // Dados da pessoa
        double peso = 70.5;      // em quilogramas
        double altura = 1.75;    // em metros
        
        // Calculando o IMC
        double imc = peso / (altura * altura);
        
        // Exibindo o resultado
        System.out.printf("Peso: %.1f kg\n", peso);
        System.out.printf("Altura: %.2f m\n", altura);
        System.out.printf("IMC: %.2f\n", imc);
        
        // Classificando o IMC
        System.out.print("Classificação: ");
        
        if (imc < 18.5) {
            System.out.println("Abaixo do peso");
        } else if (imc < 25.0) {
            System.out.println("Peso normal");
        } else if (imc < 30.0) {
            System.out.println("Sobrepeso");
        } else if (imc < 35.0) {
            System.out.println("Obesidade grau 1");
        } else if (imc < 40.0) {
            System.out.println("Obesidade grau 2");
        } else {
            System.out.println("Obesidade grau 3");
        }
        
        // Recomendações básicas
        if (imc < 18.5) {
            System.out.println("Recomendação: Consulte um nutricionista para ganho de peso saudável.");
        } else if (imc < 25.0) {
            System.out.println("Recomendação: Continue mantendo hábitos saudáveis.");
        } else {
            System.out.println("Recomendação: Consulte um médico para avaliação e orientação.");
        }
    }
}

Peso: 70,5 kg

Altura: 1,75 m

IMC: 23,02

Classificação: Peso normal

Recomendação: Continue mantendo hábitos saudáveis.

Dica: Note como as condições nos blocos if-else if são cumulativas. Por exemplo, para o IMC classificado como "Sobrepeso", sabemos que ele é maior ou igual a 25.0 (por causa do primeiro else if) e menor que 30.0 (pela condição do segundo else if).

Exemplo 3: Classificação de Faixa Etária

Este exemplo demonstra como classificar uma pessoa de acordo com sua idade:

public class ClassificacaoIdade {
    public static void main(String[] args) {
        // Idade da pessoa
        int idade = 25;
        
        // Exibindo a idade
        System.out.println("Idade: " + idade + " anos");
        
        // Classificando a faixa etária
        System.out.print("Classificação: ");
        
        if (idade < 0) {
            System.out.println("Idade inválida");
        } else if (idade < 1) {
            System.out.println("Bebê (menos de 1 ano)");
        } else if (idade < 3) {
            System.out.println("Bebê (1-2 anos)");
        } else if (idade < 6) {
            System.out.println("Criança em idade pré-escolar (3-5 anos)");
        } else if (idade < 12) {
            System.out.println("Criança (6-11 anos)");
        } else if (idade < 18) {
            System.out.println("Adolescente (12-17 anos)");
        } else if (idade < 30) {
            System.out.println("Jovem adulto (18-29 anos)");
        } else if (idade < 60) {
            System.out.println("Adulto (30-59 anos)");
        } else {
            System.out.println("Idoso (60 anos ou mais)");
        }
        
        // Verificando maioridade
        if (idade >= 18) {
            System.out.println("Status: Maior de idade");
        } else {
            System.out.println("Status: Menor de idade");
        }
        
        // Verificando faixas especiais
        if (idade >= 16 && idade < 18) {
            System.out.println("Observação: Pode votar, mas não pode dirigir.");
        } else if (idade >= 18 && idade < 21) {
            System.out.println("Observação: Pode votar e dirigir, mas é considerado menor de idade em alguns países.");
        }
    }
}

Idade: 25 anos

Classificação: Jovem adulto (18-29 anos)

Status: Maior de idade

Exemplo 4: Calculadora com if-else if

Este exemplo implementa uma calculadora simples utilizando if-else if para determinar qual operação realizar:

import java.util.Scanner;

public class CalculadoraSimples {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        
        // Solicitando os números
        System.out.print("Digite o primeiro número: ");
        double numero1 = scanner.nextDouble();
        
        System.out.print("Digite o segundo número: ");
        double numero2 = scanner.nextDouble();
        
        // Solicitando a operação
        System.out.println("\nEscolha a operação:");
        System.out.println("1 - Adição");
        System.out.println("2 - Subtração");
        System.out.println("3 - Multiplicação");
        System.out.println("4 - Divisão");
        System.out.print("Digite o número da operação: ");
        
        int operacao = scanner.nextInt();
        
        // Realizando a operação com if-else if
        System.out.print("\nResultado: ");
        
        if (operacao == 1) {
            // Adição
            double resultado = numero1 + numero2;
            System.out.println(numero1 + " + " + numero2 + " = " + resultado);
        } else if (operacao == 2) {
            // Subtração
            double resultado = numero1 - numero2;
            System.out.println(numero1 + " - " + numero2 + " = " + resultado);
        } else if (operacao == 3) {
            // Multiplicação
            double resultado = numero1 * numero2;
            System.out.println(numero1 + " * " + numero2 + " = " + resultado);
        } else if (operacao == 4) {
            // Divisão
            if (numero2 == 0) {
                System.out.println("Erro: Divisão por zero não é permitida.");
            } else {
                double resultado = numero1 / numero2;
                System.out.println(numero1 + " / " + numero2 + " = " + resultado);
            }
        } else {
            // Operação inválida
            System.out.println("Operação inválida! Por favor, escolha uma operação de 1 a 4.");
        }
        
        // Fechando o scanner
        scanner.close();
    }
}

Digite o primeiro número: 10

Digite o segundo número: 5

Escolha a operação:

1 - Adição

2 - Subtração

3 - Multiplicação

4 - Divisão

Digite o número da operação: 3

Resultado: 10.0 * 5.0 = 50.0

Atenção: Observe que no caso da divisão, temos um if aninhado para verificar se o divisor é zero. Esse tipo de verificação é importante para evitar erros de execução, como a divisão por zero.

Exemplo 5: Verificador de Dia da Semana

Este exemplo mostra como usar if-else if para verificar o dia da semana com base em um número:

public class VerificadorDiaSemana {
    public static void main(String[] args) {
        // Dia da semana (1 = Domingo, 2 = Segunda, ..., 7 = Sábado)
        int dia = 3;
        
        // Verificando o dia da semana
        System.out.print("O dia " + dia + " corresponde a: ");
        
        if (dia == 1) {
            System.out.println("Domingo");
        } else if (dia == 2) {
            System.out.println("Segunda-feira");
        } else if (dia == 3) {
            System.out.println("Terça-feira");
        } else if (dia == 4) {
            System.out.println("Quarta-feira");
        } else if (dia == 5) {
            System.out.println("Quinta-feira");
        } else if (dia == 6) {
            System.out.println("Sexta-feira");
        } else if (dia == 7) {
            System.out.println("Sábado");
        } else {
            System.out.println("Dia inválido! O valor deve estar entre 1 e 7.");
        }
        
        // Verificando se é dia útil ou final de semana
        if (dia >= 2 && dia <= 6) {
            System.out.println("Este é um dia útil.");
        } else if (dia == 1 || dia == 7) {
            System.out.println("Este é um dia de final de semana.");
        } else {
            System.out.println("Dia inválido para classificação.");
        }
        
        // Comparando com implementação usando switch-case
        System.out.print("\nUsando switch-case: ");
        
        switch (dia) {
            case 1:
                System.out.println("Domingo");
                break;
            case 2:
                System.out.println("Segunda-feira");
                break;
            case 3:
                System.out.println("Terça-feira");
                break;
            case 4:
                System.out.println("Quarta-feira");
                break;
            case 5:
                System.out.println("Quinta-feira");
                break;
            case 6:
                System.out.println("Sexta-feira");
                break;
            case 7:
                System.out.println("Sábado");
                break;
            default:
                System.out.println("Dia inválido! O valor deve estar entre 1 e 7.");
        }
    }
}

O dia 3 corresponde a: Terça-feira

Este é um dia útil.

Usando switch-case: Terça-feira

Comparação com switch-case: Para verificações de valores específicos (como números ou caracteres), o switch-case pode ser mais legível e eficiente que múltiplos if-else if. No entanto, para condições baseadas em intervalos ou expressões complexas, if-else if é mais apropriado.

Boas Práticas com if-else if-else

Aqui estão algumas recomendações para o uso eficiente da estrutura if-else if-else:

  1. Ordem das condições: Coloque as condições mais específicas ou mais prováveis de ocorrer primeiro, para melhorar a eficiência.
  2. Use chaves {} sempre: Mesmo para blocos com uma única instrução, para evitar erros e melhorar a legibilidade.
  3. Evite aninhamentos excessivos: Muitos níveis de if-else if aninhados podem tornar o código difícil de entender. Considere usar métodos separados ou outra abordagem.
  4. Considere alternativas: Para muitas verificações de valor único, switch-case pode ser mais apropriado.
  5. Teste todos os caminhos possíveis: Certifique-se de que todas as possíveis condições são tratadas, incluindo casos de erro.

Armadilhas comuns:

Exercícios

Teste seus conhecimentos sobre o uso da estrutura if-else if:

1. Qual é a principal vantagem de usar uma estrutura if-else if-else em vez de múltiplos if separados?

2. No código abaixo, qual será o resultado impresso?

int numero = 15;

if (numero > 20) {
    System.out.println("A");
} else if (numero > 10) {
    System.out.println("B");
} else if (numero > 5) {
    System.out.println("C");
} else {
    System.out.println("D");
}

3. Em uma estrutura if-else if-else, quando o bloco else é executado?

4. O que acontece se uma condição em um bloco if-else if-else for verdadeira?

5. Complete o código para calcular o desconto baseado no valor da compra:

double valorCompra = 850.0;
double desconto = 0.0;

if (valorCompra > 1000.0) {
    desconto = valorCompra * 0.15;  // 15% de desconto
} else if (valorCompra > 500.0) {
    _________________________;  // 10% de desconto
} else if (valorCompra > 100.0) {
    desconto = valorCompra * 0.05;  // 5% de desconto
} else {
    desconto = 0.0;  // Sem desconto
}

Exercícios de Aplicação AFF Education

Reforce o conteúdo desta aula com mais dois exercícios práticos:

1. Para classificar uma nota: >=7 "Aprovado", >=5 "Recuperação", senão "Reprovado". Para nota 6, a saída é:

2. Por que a ordem das condições importa em uma cadeia if-else if?