Erro ao utilizar a classe Scanner

Olá galera,

Venho fazendo uns testes com a classe Scanner para ler informações do teclado e fiz um código assim:

Scanner ler = new Scanner(System.in);

System.out.println("CODIGO"); // Passa por aqui normalmente
int codigo = ler.nextInt(); // Aqui também
System.out.println("NOME DO PRODUTO"); // E aqui também
String nome = ler.nextLine(); // O programa não pára aqui
System.out.println("DESCRICAO DO PRODUTO"); // E imprime essa linha sem receber a variável nome
String descricao = ler.nextLine(); // Aqui ele pára e recebe o valor digitado para a descrição
System.out.println("VALOR UN (R$)"); // Passa por aqui normalmente
double valorun = ler.nextDouble(); // Aqui também
System.out.println("QUANT EM ESTOQUE"); // Aqui também
int estoque = ler.nextInt();// E aqui também
System.out.println("SAIR DA TELA DE CADASTRO?"); // Imprime esta linha
String escolha = ler.nextLine(); // E não pára aqui para receber o valor a ser digitado

System.out.println("Codigo: " + codigo + " Nome: " + nome + " Descricao: " + descricao); // Imprime esta linha com a variável nome vazia
System.out.println("Valor: " + valorun + " Estoque: " + estoque + " Escolha: " + escolha); // E esta com a variável escolha vazia

O problema é que venho tendo alguns problemas conforme meus comentários no código acima.
Se alguém souber como me ajudar ficarei muito grato.

Abraços!

A solução seria sempre usar nextLine() OU depois de cada chamada a nextInt(), nextDouble(), etc chamar um nextLine() para consumir o lixo do buffer.

Tenta utilizar apenas:

ler.next();

já passei por isso

acontece que o nextInt() só pega o primeiro token, o resto da entrada continua lá ( acho que fica um “\n” o que faz a proxima leitura passar direto )

pensei em dois jeitos pra resolver:

1 - ler tudo com nextLine() e depois converter para inteiro, float, double…

2 - colocar um nextLine() a mais para limpar qualquer sobra