Problemas com try e catch

Oi galera…
Estou com o seguinte problema, no codigo abaixo, quando eu digito uma letra no lugar de um inteiro ele entra no try, mas na hora que ele volta no while ele não deixa eu digitar denovo o valor, ele simplesmente vai direto no catch e fica um loop infinito.

[code]import java.util.*;
public class Teste {

public static void main(String[] args) {
	Scanner leia = new Scanner(System.in);
	int opcao;
	
	do{
		System.out.println("1 - Opcao 1");
		System.out.println("2 - Opcao 2");
		System.out.println("3 - Opcao 3");
		System.out.println("Digite sua opcao: ");
		try{
			opcao = leia.nextInt();
		}
		catch(InputMismatchException e){
			System.out.println("Valor incorreto, digite um numero inteiro!");
			opcao = 0;
		}
	}while(opcao < 1 || opcao > 3);				
}

}[/code]

Valeu… :wink:

O método nextInt só le o inteiro, o que acontece é que qnd vc digita o valor vc digita o caracteres mais a letra , como vc esta usando nextInt o java so le o caractere q vc escreveu, o permanece no buffer. Com isso, ele fica eternamente no loop lendo o mesmo enter que vc digitou na primeira vez, como se tivesse sido o caracteres que você digitou naquela interação.

Para solucionar esse problema, utilize o método nextLine() e mude a excessao no seu catch… veja:

[code]import java.util.*;
public class Teste {

public static void main(String[] args) {
	Scanner leia = new Scanner(System.in);
	int opcao;
	
	do{
		System.out.println("1 - Opcao 1");
		System.out.println("2 - Opcao 2");
		System.out.println("3 - Opcao 3");
		System.out.println("Digite sua opcao: ");
		try{
			opcao = Integer.parseInt(leia.nextLine());
		}
		catch(NumberFormatException e){
			System.out.println("Valor incorreto, digite um numero inteiro!");
			opcao = 0;
		}
	}while(opcao < 1 || opcao > 3);				
}

}[/code]

ok?

Muito obrigada!!! :slight_smile: