Loop Infinito ao tratar entrada de dado

16 respostas
java
G

o método está dando loop infinito, não sei porque!

private int LerDadoInteger(int n){
	
	boolean flag = true;

	while(flag){

		System.out.println("digite o valor");

		try{

			n = inputN.nextInt();
			flag = false;
		}catch(InputMismatchException c){

			flag = true;
			
		}
	}

	return n;

16 Respostas

Rodrigomarden

Coloque uma mensagem de retorno na captura do erro, provavelmente ele está sempre entrando no catch

G

private int LerDadoInteger(int n){

boolean flag = true;

	while(flag){

		System.out.println("digite o valor");

		try{

			n = inputN.nextInt();
			flag = false;
		}catch(InputMismatchException c){

			System.out.println("digite um Número");
			
		}

assim? mas o problema é porque ele não pedi o número novamente para eu digitar, ele fica no loop assim :

digite um Número
digite o valor
digite um Número
digite o valor
digite um Número
digite o valor
digite um Número
digite o valor
digite um Número
digite o valor

Rodrigomarden

Era uma mensagem apenas para retornar o erro.

Então em nenhum momento você digitou um valor ou apenas uma vez e ai ele não sai do loop?

Rodrigo_Void

O que vc está digitando exatamente?
Recomendo criar um novo inputN, deve estar com buffer.
inputN = new Scanner...

D

Não está caindo no try, coloque um if no lugar para testar.

G

ele não sai do loop não, era para voltar no começo do while e pedi novamente o valor

G

quero validar o dado, exemplo : se eu digitar uma string ou char ele captura no try/catch e pedi para digitar novamente o dado

Rodrigo_Void

Vc não precisa da flag. Pode fazer while(true) e colocar return n; depois da leitura.

G

mas como irei captura a exception sem try/ cacth?

G

excelente ideia, irei tentar aki! valew !

Rodrigo_Void

Pois então vai ficar em loop até digitar algo correto. Por isso pedi oq estava digitando de valor. Teste com um valor VÁLIDO pra ver se sai do loop. Pois a lógica está certa (se não for problema de buffer), deve sair do loop quando digitar um int válido.

G

Isso é o buffer mesmo! pq primeiro eu digite errado(String) ae fica no buffer pq irei ler uma int depois!

Rodrigo_Void

Cria um novo Scanner então. Sempre recomendo isso. Pq se vc lê String fica em buffer.

G

private int LerDadoInteger(int n){

boolean flag = true;

	while(flag){

		System.out.println("digite o valor");

		try{

			n = new Scanner(System.in).nextInt();
			return n;
		}catch(InputMismatchException c){

			System.out.println("digite um Número");
			
			}
		}
	return 0;

consegui resolver assim galera! Valew ae! Era Buffer mesmo!

Rodrigomarden
while(true){

	System.out.println("digite o valor");

	try{

		n = new Scanner(System.in).nextInt();
		return n;
	}catch(InputMismatchException c){

		System.out.println("digite um Número válido!\n");
		
		}
	}
return 0;

Fica melhor assim.

G

valew Cara!

Criado 25 de maio de 2017
Ultima resposta 25 de mai. de 2017
Respostas 16
Participantes 4