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

Dúvida no Ex. 2 da Aula 3 - Crie e uso laços do tipo do/while

Olá pessoal.

Estou com uma dúvida especificamente nesta questão:

class A {
    public static void main(String[] args) {
        if(args.length < 10) {
            do {
                if(args.length>2) return;
            } while(true);
        }
        System.out.println("Finalizou");
    }
}

Como foi declarado diretamente o valor "true" na condição do while, não era para o compilador entender que o do/while entraria em loop infinido, e não executaria o código posterior a ele, assim como acontece neste for:

for(int i = 0; true; i++) {
    System.out.println("dentro do for");
}
System.out.println("fora do for");
// gerará erro de compilação acusando que a linha "fora do for" nunca será alcançada.

Abraços.

4 respostas

Ola, Thiago!

Rodei o código aqui e ele fica executando o do .

Coloca um System.out.println() dentro do do.

public static void main(String[] args) {
    if(args.length < 10) {
        do {
            if(args.length>2) return;
            System.out.println("Estou executando o [ do ]");
        } while(true);
    }
    System.out.println("Finalizou");
}

Abraço !

Valeu Cristiano, mas acho que não formulei minha pergunta direito.

Meu questionamento é do porque o Do/while estar executando, pois ao ter o valor literal de true na condição, ele deveria entender que todo código posterior nunca será executado, pois ficará em loop infinito.

Nos loops for tradicionais, se você declarar true na condição e houver código após ele, será gerado um erro de compilação. Quero saber se esta condição não se aplica aos loops while e do/while.

Tenho mais um exemplo aqui que pode ajudar:

do {
    System.out.println("dentro do while");
}
while(true);
System.out.println("fora do while");

Já este do/while NÃO roda, porque?

solução!

Thiago,

A parte que esta fora do while é o:

System.out.println("Finalizou");

Certo ?

Repare que ele está fora do:

if(args.length < 10)

Ou seja, ele pode ser executado independente do:

while(true);

Então o problema não é entrar em looping infinito, o compilador reclama quando existe um código que NUNCA será executado! É isso?