Solucionado (ver solução)
Solucionado
(ver solução)
4
respostas

Porque o compilador viu primeiro o erro do return antes da expressão do switch?

static int x(final int l) {
        for(int i=0;i<100;i++) {
            switch(i) {
                case l:
                    System.out.println(l);
                    if(l==i) return;
                case 0:
                    System.out.println(0);
            }
        }
        System.out.println("Fim");
        return -1;
    }
4 respostas

Bom dia Wagner, na verdade o erro é mais pra cima, quando você faz um case l, pois l é variável e não pode ser executado pelo switch, assim pra esse código funcionar antes do switch você deveria colocar

final int l = 1;

Mas isso quebra sua ideia porque precisaria de um case pra cada possibilidade existente.

Espero ter ajudado, abraços

Boa tarde Guilherme, obrigado por me responder. Sua observação foi exatamente igual a minha e por isso estaria certo, mas se você tentar escrever este código e compilar mesmo no eclipse vai ver que o primeiro erro do compilador é o do return, exatamente igual ao relatado pela equipe do Alura. Por isso minha pergunta continua, porque o compilador percebe primeiro este erro, ao invés de perceber naturalmente o erro do switch conforme observamos? Eu imagino que a resposta está na especificação do compilador, mas pensei que o time do Alura pudesse me responder mais rapidamente, ao invés de eu ir procurar lá no site da especificação do compilador. Mais uma vez obrigado em responder.

solução!

Wagner,

Na verdade isso é o Eclipse que faz, se você compilar pela linha de comando, você verá que os dois erros são apresentados:

Teste.java:7: error: constant expression required
                case l:
                     ^
Teste.java:9: error: incompatible types: missing return value
                    if(l==i) return;
                             ^
2 errors

Sempre que for estudar para certificação, faça a compilação na mão e não usando o Eclipse. Na prova é pedido que você saiba compilar usando o javac.

Quanto à resposta do exercício, vamos alterar para que inclua as duas observações.

Abraço!

Muito obrigado pela resposta. Eu realmente não havia compilado na mão, mas mentalmente eu havia feito a compilação, onde cheguei a mesma conclusão do Guilherme que o primeiro erro deveria ser o do Switch, então como vi a resposta do Alura, resolvi jogar o trecho de código no eclipse, que me deu a mesma resposta do Alura, por isto imagino que o time do Alura deve ter feito o mesmo, sendo assim agradeço a todos e vou levar em conta a compilação e execução apenas pela linha de comando.