Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Problema pra ler input do usuário.

Estou criando um pequeno programinha de cadastro de livros, pretendo utilizar o que aprendi com OO para criar os livros, cadastrar em um .txt e também abrir ou editar se necessário. Para isso eu criei um menu para o usuário selecionar as opções que ele quer. A primeira opção é 'Novo Livro', case 1:

int userInput = myObj.nextInt();

        switch (userInput) {
        case 1:
            int novoInput = 0;
            String nome;
            while (novoInput != 1) {
                System.out.println("Informe o nome do Livro: ");
                nome = myObj.nextLine();

                System.out.println("Você digitou: " + nome);
                System.out.println("[1] Confirmar");
                System.out.println("[2] Corrigir");
                novoInput = myObj.nextInt();
            }
            break;

Assim o usuário entra na opção 1, digita o nome do livro, que a principio está puramente procedural mas pretendo usar a class Livro que já criei, e em seguida confirma ou corrige caso tenha digitado errado. Mas ao rodar o programa ele passa o while inteiro e fica esperando o novoInput no final corretamente, mas não pede o nome. Não sei o que aconteceu...

2 respostas

Encontrei uma pseudo-solução (Famosa gambiarra). Para alguém que tenha esse problema, só adicione um segundo nextLine(); logo antes do primeiro:

int userInput = myObj.nextInt();

        switch (userInput) {
            case 1:
                int newInput = 2;

                while (newInput == 2) {
                    String name;
                    System.out.print("Book name: ");
        ----------> name = myObj.nextLine();
                    name = myObj.nextLine();

                    System.out.println();
                    System.out.println("You typed: " + name);
                    System.out.println("[1] Confirm");
                    System.out.println("[2] Type again");
                    newInput = myObj.nextInt();
                }
                break;

Isso resolveu meu problema!

Se alguém tiver uma solução melhor fico feliz de saber, não gosto de colocar muita gambiarra no código.

solução!

Já tive esse problema em outras linguagens.

O que acontece é que quando ele vai ler o número inteiro (nextInt), você precisa dar enter depois de digitar o número, e é esse enter que causa o problema. Na próxima leitura de linha (nextLine) ele lê o enter que você apertou anteriormente, passando direto para o nextInt novamente.

Para corrigir isso, você precisa ler um char depois do nextInt. Pelo que pesquisei rapidamente, é assim que se le um char em Java: .next().charAt(0).

Ou seja, tente:

myObj.next().charAt(0);

após a linha do nextInt.