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

Uso do Scanner, Limpar buffer

Eu enfrentei um problema em que não estava digitando os dados incorretamente, mas o Scanner estava "confuso" devido ao caractere de nova linha () deixado no buffer após a leitura dos números inteiros. A solução foi limpar o buffer utilizando , o que eliminou essa confusão.

import java.util.Scanner;

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

        System.out.println("Digite seu nome: ");
        String nome = scanner.nextLine();
        System.out.println("Digite seu sobrenome: ");
        String sobreNome = scanner.nextLine();
        System.out.println("Digite sua idade: ");
        int idade = scanner.nextInt();
        scanner.nextLine(); // Limpa o buffer após ler a idade
        System.out.println("Digite seu ano de Nascimento: ");
        int dataDeNascimento = scanner.nextInt();
        scanner.nextLine(); // Limpa o buffer após ler o ano de nascimento (boa prática)

        System.out.printf("Meu primeiro nome é %s e meu sobrenome é %s, tenho %d de idade e nasci no ano de %d%n", nome, sobreNome, idade, dataDeNascimento);
        scanner.close();
    }
}
1 resposta
solução!

Olá Alailson! Tudo bem?

Isso acontece porque o método nextInt() não consome a nova linha (caractere de quebra de linha) deixada no buffer após a leitura de um número inteiro. Isso pode causar problemas quando você tenta ler uma linha de texto logo após um número.

A solução que você encontrou, de usar scanner.nextLine() após nextInt(), é uma ótima prática para limpar o buffer e evitar que esse problema aconteça. Isso garante que qualquer caractere de nova linha remanescente seja consumido antes de ler a próxima entrada de texto.

No seu código, você já está aplicando essa solução corretamente. Após cada leitura de um número inteiro com nextInt(), você está chamando scanner.nextLine() para limpar o buffer, o que evita que o próximo nextLine() pule a entrada de texto.

Por exemplo:

int idade = scanner.nextInt();
scanner.nextLine(); // Limpa o buffer após ler a idade

Essa linha de código é essencial para garantir que a entrada do usuário seja lida corretamente quando você alterna entre a leitura de números e texto.

No mais, bons estudos!