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);
}
}