4  Condicionais

Transformar regras em decisões previsíveis

4.1 Objetivos de aprendizagem

Ao concluir este capítulo, você deverá ser capaz de:

  • escrever decisões com if, else if e else;
  • combinar condições com operadores relacionais e lógicos;
  • escolher entre if e switch;
  • comparar comandos de texto sem depender de maiúsculas ou espaços.

4.2 Expressões booleanas

Losango com a pergunta comando é sair, levando a encerrar quando verdadeiro e continuar quando falso.

Uma condição escolhe apenas um dos caminhos possíveis.

Uma condição produz true ou false. Os operadores relacionais são ==, !=, >, <, >= e <=. Os operadores lógicos mais usados são && (E), || (OU) e ! (NÃO).

double nota = 7.5;
int faltas = 2;

boolean aprovado = nota >= 7.0 && faltas <= 5;

Use parênteses quando eles tornarem a intenção mais clara, mesmo que a precedência da linguagem já produza o resultado correto.

4.3 Decisões com if

if (nota >= 7.0) {
    System.out.println("Aprovado");
} else if (nota >= 5.0) {
    System.out.println("Recuperação");
} else {
    System.out.println("Reprovado");
}

A ordem importa: condições mais específicas devem aparecer antes de condições mais abrangentes.

4.4 Opções fechadas com switch

Use switch quando uma única expressão é comparada com um conjunto pequeno de valores fixos. Use if para intervalos, combinações e regras diferentes entre si.

import java.util.Locale;

public class Capitulo03Condicionais {
    public static String responder(String entrada) {
        String comando = entrada.strip().toLowerCase(Locale.ROOT);

        return switch (comando) {
            case "oi" -> "Olá! Como posso ajudar?";
            case "ajuda" -> "Comandos: oi, dica e sair.";
            case "dica" -> "Use nomes que revelem a intenção.";
            case "sair" -> "Até logo!";
            default -> "Não entendi. Digite ajuda.";
        };
    }

    public static void main(String[] args) {
        System.out.println(responder("  AJUDA  "));
    }
}

Locale.ROOT torna a normalização previsível, independentemente do idioma configurado no computador.

4.5 Erros frequentes

Um estudante pergunta se o chatbot pode responder sim e não ao mesmo tempo; o robô explica que condições bem escritas evitam isso.

Quadrinho: o chatbot indeciso.
  • comparar String com ==;
  • repetir a mesma condição em vários pontos;
  • escrever uma condição que nunca pode ser verdadeira;
  • criar muitos níveis de if aninhados;
  • não prever entrada vazia ou desconhecida.

Quando uma decisão crescer demais, extraia-a para um método com nome claro.

4.6 Evolução do projeto: versão 3

O chatbot agora reconhece oi, ajuda, dica e sair. A resposta padrão orienta a pessoa em vez de apenas informar erro.

O exemplo completo está em examples/src/Capitulo03Condicionais.java.

4.7 Prática verificável

Adicione o comando sobre e escreva uma regra que classifique horas de estudo:

  • menos de 3 horas: “ritmo inicial”;
  • de 3 a 6 horas: “ritmo consistente”;
  • acima de 6 horas: “ritmo intensivo”.

Casos de teste:

Entrada Resultado esperado
AJUDA lista de comandos
dica dica de Java
desconhecido orientação para digitar ajuda
3 horas ritmo consistente
DicaCritério de domínio

Explique por que switch foi usado para comandos e if para intervalos de horas.