Carregando...
Carregando...
Ajude a melhorar a plataforma
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"); } }
Explique melhor esta questão
Abre o Tutor com o enunciado e as alternativas já no campo — você revisa e envia.
Esta questão foi verificada por um de nossos administradores.
Alternativa E - O código será compilado normalmente e exibirá a expressão "Teste 2" quando for executado.
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).
No Java, quando não utilizamos chaves ({}) para delimitar blocos de código, o compilador segue uma regra rígida:
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).
Vamos simular o fluxo de execução linha por linha:
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").| Alternativa | Motivo do Erro | | --- | --- | | A | O código não imprime "Teste 1" porque a condição interna é false. | | B | O código imprime strings ("Teste 1" ou "Teste 2"), não o valor booleano da condição. | | C | A sintaxe está correta. Java permite aninhar ifs sem chaves. | | D | Não há erro de compilação. O compilador resolve a ambiguidade seguindo a regra do "else mais próximo". |
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".