1
resposta

Exercício 07

O código não iria funcionar porque a variáveis idade e mensagem estão dentro do escopo do if, corrigindo ficaria assim:

public class Principal {
    public static void main(String[] args) {
        int idade = 17;
        String mensagem = "";
        if (idade >= 18) {
            mensagem = "Você é maior de idade.";
        } else {
            mensagem = "Você é menor de idade.";
        }

        System.out.println(mensagem);
    }
}
1 resposta

Olá, Bernardo. Como vai?

O seu diagnóstico foi cirúrgico e a sua correção está impecável! Você identificou um dos conceitos mais importantes e que mais geram dores de cabeça no início do desenvolvimento de software: o escopo de variáveis.

Como você bem pontuou, se uma variável for declarada dentro das chaves {} de um bloco condicional (if ou else), ela nasce e morre ali dentro. O método System.out.println que estava do lado de fora não conseguiria enxergá-la, resultando em um erro de compilação (Cannot resolve symbol).

Ao mover as declarações de idade e mensagem para o escopo do método main, você garantiu que todo o bloco de código abaixo delas tivesse acesso para ler e modificar os seus valores.

Para agregar ainda mais valor aos seus estudos e à sua atuação como Gerente de Orçamento e Finanças — onde a lógica limpa e estruturada é crucial —, vale a pena conhecer uma alternativa muito elegante para reescrever esse mesmo bloco if/else.

Em Java, quando queremos atribuir um valor a uma variável com base em uma condição simples de duas vias, podemos utilizar o Operador Ternário (?:). Ele permite resolver toda essa estrutura em apenas uma única linha de código, mantendo o escopo perfeitamente correto.

Veja como o seu código ficaria aplicando essa boa prática de mercado:

public class Principal {
    public static void main(String[] args) {
        int idade = 17;
        
        // O operador ternário avalia a condição antes da '?'. 
        // Se for verdadeira, atribui o primeiro texto; se for falsa (após os ':'), atribui o segundo.
        String mensagem = (idade >= 18) ? "Você é maior de idade." : "Você é menor de idade.";

        System.out.println(mensagem);
    }
}

O que muda com essa estrutura?

  • Código mais limpo e conciso: Você reduz o número de linhas e chaves no seu programa.
  • Imutabilidade e Segurança: Você declara e já inicializa a variável mensagem com o valor definitivo de forma direta, eliminando a necessidade de iniciar com uma string vazia "" para só depois alterá-la.

Parabéns pelo excelente domínio sobre o ciclo de vida das variáveis e pela precisão na correção do exercício!

Espero que possa ter lhe ajudado!