Literatura Múltipla Escolha

Durante a programação é de extrema importância analisar as estruturas de decisão, pois um pequeno erro de lógica pode levar a resultados inesperados. Diante deste contexto, assinale a alternativa que indica o que acontece quando se tenta compilar e executar a seguinte classe em Java:

Durante a programação é de extrema importância analisar as estruturas de decisão, pois um pequeno erro de lógica pode levar a resultados inesperados. Diante deste contexto, assinale a alternativa que indica o que acontece quando se tenta compilar e executar a seguinte classe em Java:

public class Exemplo {
    public static void main(String[] args) {
        if (true)
            if (false)
                System.out.println("Teste 1");
            else
                System.out.println("Teste 2");
    }
}
  1. O código será compilado normalmente e exibirá a expressão "Teste 1" quando for executado.
  2. O código será compilado normalmente e exibirá "false" quando for executado.
  3. O código produz um erro de compilação, uma vez que a sintaxe do comando "if" está incorreta.
  4. O código produz um erro de compilação, pois o compilador não conseguirá determinar a qual comando "if" a cláusula "else" se refere.
  5. O código será compilado normalmente e exibirá a expressão "Teste 2" quando for executado.

Resolução completa

Explicação passo a passo

E
Alternativa E

Alternativa E - O código será compilado normalmente e exibirá a expressão "Teste 2" quando for executado.

Análise do Problema

Esta questão aborda um dos tópicos clássicos de sintaxe em linguagens como Java, C e C++, conhecido como "Dangling Else" (Else Pendurado).

1. Regra de Associação do "Else"

No Java, quando não utilizamos chaves ({}) para delimitar blocos de código, o compilador segue uma regra rígida:

  • Um comando else sempre se associa ao próprio if mais próximo que ainda não tenha recebido um else.

No código apresentado:

if (true)
    if (false)
        System.out.println("Teste 1");
    else
        System.out.println("Teste 2");

O else está visualmente alinhado com o segundo if, mas mesmo sem alinhamento perfeito, a regra de escopo dita que ele pertence ao if (false).

2. Lógica de Execução

Vamos simular o fluxo de execução linha por linha:

  1. Primeiro if (true): A condição é verdadeira. O programa entra neste bloco.
  2. Segundo if (false): A condição é falsa. O bloco de código imediatamente abaixo deste if (que seria imprimir "Teste 1") é ignorado.
  3. Cláusula else: Como o if (false) falhou, o programa executa o bloco associado ao seu else.
  4. Resultado: É executado System.out.println("Teste 2").

3. Por que as outras alternativas estão erradas?

AlternativaMotivo do Erro
AO código não imprime "Teste 1" porque a condição interna é false.
BO código imprime strings ("Teste 1" ou "Teste 2"), não o valor booleano da condição.
CA sintaxe está correta. Java permite aninhar ifs sem chaves.
DNão há erro de compilação. O compilador resolve a ambiguidade seguindo a regra do "else mais próximo".

Conclusão

Se o objetivo do programador fosse que o else pertencesse ao primeiro if, seria obrigatório usar chaves {}:

// Forma correta para imprimir "Teste 2" quando o primeiro IF é falso
if (true) {
    if (false)
        System.out.println("Teste 1");
} else { // Aqui o else pertence ao primeiro if
    System.out.println("Teste 2");
}

Como o código original não possui chaves, a lógica de default prevalece, resultando na execução de "Teste 2".

Tem outra questão para resolver?

Resolver agora com IA

Mais questões de Literatura

Ver mais Literatura resolvidas

Tem outra questão de Literatura?

Cole o enunciado, tire uma foto ou descreva o problema — a IA resolve com explicação completa em segundos.