Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[Dúvida] Problema ao fazer leitura da descrição do produto com .nextLine()

Por que a leitura dos dados com nextLine() ocasiona de primeiro imprimir a mensagem dos dois prints e não colher adequadamente o valor para a variável descrição? Há algum artigo da alura que fala sobre a leitura de dados do tipo string?

Código de exemplo:

System.out.println("Digite a descrição da compra:");
String descricao = leituraDoTeclado.nextLine();

System.out.println("Digite o valor da compra:");
float valor = leituraDoTeclado.nextFloat();
1 resposta
solução!

O problema que você está enfrentando com o método nextLine() do Scanner em Java é muito comum e ocorre devido ao modo como o Scanner lida com diferentes tipos de entrada. Quando você usa nextFloat(), nextInt(), ou qualquer método nextXxx() diferente de nextLine(), o Scanner lê o valor numérico, mas não consome o caractere de nova linha (enter) que é gerado quando você pressiona Enter. Esse caractere de nova linha permanece no buffer de entrada do Scanner.

Para resolver isso, você pode adicionar uma chamada a mais de nextLine() após cada nextFloat(), nextInt(), entre outros.. Apenas para consumir o restante da linha incluindo o caractere de nova linha. Isso evita que o próximo nextLine() seja afetado. Aqui está minha sugestão de implementação:

System.out.println("Digite a descrição da compra:");
String descricao = leituraDoTeclado.nextLine();

System.out.println("Digite o valor da compra:");
float valor = leituraDoTeclado.nextFloat();
leituraDoTeclado.nextLine();

System.out.println("Descrição: " + descricao);
System.out.println("Valor: " + valor);