Porque o seguinte código com do...while não compila?

public class Question_6 {
	public static void main(String[] args) {
		do{
			int x = 0;
			int y = x++;
			System.out.print(y);
		} while(y < 5);
	}
}

Não entendi porque o código não compila, eu tenho o código no do e a comparação no while, mas a saída ao compilar é a seguinte:

error: cannot find symbol
}while(y < 5);
^
symbol: variable y
location: class Question_6
1 error

Porque?

Tenta isso amigo:

public class Question_6 {
	public static void main(String[] args) {
		int x = 0;
		int y;
      do{
			y = x++;
			System.out.print(y);
		} while(y < 5);
	}
}

O while considera a existência de uma variável y no contexto do programa. Contudo o y só passa a existir dentro do while na sua versão.
Na sua versão, tecnicamente o compilador executaria o while antes de ser criado a variavel y. Por isso não rodou. Já que ele não está achando a mesma que considerando que o while está tentando checar algo que ainda não existe.
Como eu criei a variavel y antes do DO WHILE, o programa entende que a minha variável y existe antes de executar o loop, o DO WHILE ficaria responsável apenas por fazer o processamento de somar +1 e depois checar se o y é menor que 5.

Espero que tenha ajudado.

3 curtidas

Ajudou sim, agora entendi, obrigado!