[Resolvido]Dúvida, problema ao usar .nextLine após .nextInt

Boa noite pessoal!

Passei por um problema quando utilizei o seguinte código (trecho com problema):

String endereco="";
String cep="";
int opc=0;

Scanner scan = new Scanner (System.in);

System.out.println("Selecione sua opção para manipulação da tabela: \n" +
"1) Incluir dados\n" +
"2) Alterar dados\n" +
"3) Excluir dados\n" +
"4) Buscar dados");
opc=scan.nextInt();

System.out.println("Digite o endereço");
endereco=scan.nextLine();
System.out.println("\n");
System.out.println("Digite o cep");
cep=scan.nextLine();
System.out.println("Endereço: "+endereco+" / CEP: "+cep);

Após digitar o número da informação, ao invés de ele me pedir para digitar o endereço, ele aparecia a linha

Digite o endereço
Digite o cep

e o resultado sempre me ignorava o endereço, ele vinha em branco!

A solução que encontrei foi usar o .nextLine no lugar do .nextInt. Aí fiquei na dúvida, e se eu tiver que usar apenas números? Isto é um bug ou é algo que há como corrigir?

Obrigado!

depois de nextQualquerTipo use um nextLine, do contrário o caracter de nova linha vai continuar no buffer de entrada e portanto o próximo nextLine vai passar batido.
Os nextQualquerTipo não recolhem o caracter de nova linha

1 curtida

Desculpa DavidUser, não consegui implementar, você poderia me dar um exemplo?

Obrigado!

		String endereco="";
		String cep="";
		int opc=0;

		Scanner scan = new Scanner (System.in);

		System.out.println("Selecione sua opção para manipulação da tabela: \n" +
		"1) Incluir dados\n" +
		"2) Alterar dados\n" +
		"3) Excluir dados\n" +
		"4) Buscar dados");
		opc=scan.nextInt();
		scan.nextLine(); //apenas o nextLine remove o caracter de nova linha (gerado pelo seu Enter) da stream de entrada

		System.out.println("Digite o endereço");
		endereco=scan.nextLine();
		System.out.println("\n");
		System.out.println("Digite o cep");
		cep=scan.nextLine();
		System.out.println("Endereço: "+endereco+" / CEP: "+cep);

Eu recomendo usar o nextLine para tudo que for ler do teclado. Se precisar converter para números e outros tipos, use o Integer.parseInt.

Nossa pior que eu tentei algo assim aqui e não consegui, mas compreendi agora, estava pensando em uma utilização de apenas para String.
Muito obrigado DavidUser!

Entendi Bruno, faço a leitura e em seguida uso a conversão Integer.parseInt (ou o tipo que eu precisar). Valeu pela dica!