Dúvida referente à leitura de dados com Scanner

Boa noite galera,

Estou desenvolvendo um código para cadastro de produtos e venho encontrando algumas dificuldades. Não irei postar todo o código aqui por ser uma dúvida mais direcionada.

Scanner ler = new Scanner(System.in); System.out.print("Nome: "); nomeProd[indice] = ler.nextLine(); System.out.print("Descricao do produto: "); descricaoProd[indice] = ler.nextLine(); System.out.print("Encerrar cadastro? "); escolha = ler.next();
Este trecho de código está dentro de um loop, o índice está sendo incrementado normalmente e não causa nenhum erro. O programa roda normalmente na primeira entrada do loop. O que me deixa realmente confuso é quando eu respondo que não quero encerrar o cadastro e ele retorna para esta linhaSystem.out.print("Nome: "); nomeProd[indice] = ler.nextLine();O programa não pára pra ler o nome do produto e já imprime esta linha e parando aí para esperar a entrada de dados seguinte.System.out.print("Descricao do produto: "); descricaoProd[indice] = ler.nextLine();Já tentei alterar o trecho “nomeProd[indice] = ler.nextLine();” para “nomeProd[indice] = ler.next();” mas aí o programa não pára pra ler a descrição do produto e imprime a próxima linha (que seria para ler o estoque).

Não posso modificar este trecho “descricaoProd[indice] = ler.nextLine();” para “descricaoProd[indice] = ler.next();” pois dá um erro de exceção InputMismatchException quando digito várias palavras como “Cadeira simples de madeira”. Realmente não sei o que acontece aí.

Minha explicação deve ter ficado meio confusa, mas se alguém conseguir entender e puder me ajudar eu agradeço.

Valeu gente!

Olá,

tente usar sempre o método nextLine() da classe Scanner, funciona melhor.

Vc não colocou o código do loop, mas para funcionar corretamente, seu código deve ser algo como isso:

String line = null;
while(line == null || !line.equals("sim")) {
    Scanner ler = new Scanner(System.in);  
    System.out.print("Nome: ");
    line = ler.nextLine();
    nomeProd[indice] = line;
    System.out.print("Descricao do produto: ");  
    line = ler.nextLine();
    descricaoProd[indice] = line;  
    System.out.print("Encerrar cadastro? ");  
    line = ler.nextLine();
}