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

[Dúvida] Aplicação pulando a pergunta

Estou tentando fazer os exercícios de lógica do 7 Days of Code no Java, mas me deparei com o seguinte problema: Aparece a pergunta da linha 11 mas pula a opção de responder pelo teclado e roda o resto da aplicação sem notificar nenhum erro.

import java.util.Scanner;

public class DayTwo {
    public static void main(String[] args) {
        Scanner readingKeyboard = new Scanner(System.in);

        System.out.println("Qual é o seu nome?");
        String name = readingKeyboard.nextLine();
        System.out.println(name + ". Quantos anos você tem?");
        int age = readingKeyboard.nextInt();
        System.out.println(name + ". Qual linguagem de programação você está estudando?");
        String programmingLanguage = readingKeyboard.nextLine();

        String personalData = """
                Olá %s.
                Você tem %d anos e está
                estudando %s.
                """.formatted(name, age, programmingLanguage);

        System.out.println(personalData);


    }
}

Perguntei ao Chat-GPT e ele me deu a seguinte solução, mas não sei se é a mais correta:

"O problema que você está enfrentando ocorre devido ao fato de que, após ler um valor int com nextInt(), o cursor do scanner não consome a nova linha (\n) deixada na entrada após a leitura do número. Quando você chama nextLine() após nextInt(), ele lê a nova linha pendente e avança para a próxima entrada, o que faz com que pareça que ele está pulando a pergunta.

Para resolver esse problema, você pode adicionar um readingKeyboard.nextLine() após a leitura do número da idade para consumir a nova linha pendente antes de ler a resposta da linguagem de programação. Aqui está uma versão modificada do seu código:"

import java.util.Scanner;

public class DayTwo {
    public static void main(String[] args) {
        Scanner readingKeyboard = new Scanner(System.in);

        System.out.println("Qual é o seu nome?");
        String name = readingKeyboard.nextLine();
        System.out.println(name + ". Quantos anos você tem?");
        int age = readingKeyboard.nextInt();
        readingKeyboard.nextLine(); // Consumir a nova linha pendente
        System.out.println(name + ". Qual linguagem de programação você está estudando?");
        String programmingLanguage = readingKeyboard.nextLine();

        String personalData = """
                Olá %s.
                Você tem %d anos e está
                estudando %s.
                """.formatted(name, age, programmingLanguage);

        System.out.println(personalData);
    }
}
1 resposta
solução!

Boa noite

Apesar de parecer estranho, essa é, de fato, a resposta correta. Sempre que fazemos a leitura de um numérico (readInt), logo após, fazemos um readLine exatamente para evitar erros na sequência de leituras de dados do teclado.

Dessa vez o chatGPT acertou. =)