Limpeza de Buffer com Scanner em Java
Seu código tá certinho e de repente um Scanner.next() retorna vazio?
A classe Scanner
do Java é uma ferramenta útil para lidar com a entrada do usuário. No entanto, ao usá-la, você pode encontrar problemas se não limpar o buffer de entrada corretamente.
O que é o Buffer?
O buffer é uma área de armazenamento temporário na memória do computador que é usada para guardar dados enquanto eles estão sendo transferidos de um lugar para outro. Em Java, quando você usa a classe Scanner
para ler a entrada do usuário, os dados são primeiro colocados no buffer antes de serem processados.
Por que limpar o Buffer?
Se você não limpar o buffer após ler a entrada do usuário, os dados antigos ainda estarão presentes no buffer na próxima vez que você tentar ler a entrada. Isso pode causar problemas, pois você pode acabar lendo dados antigos em vez dos novos dados que o usuário acabou de inserir.
Como limpar o Buffer?
Em Java, você pode limpar o buffer chamando o método nextLine()
da classe Scanner
após cada chamada para nextInt()
, nextDouble()
, etc. Aqui está um exemplo:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("Digite um número: ");
int number = scanner.nextInt();
scanner.nextLine(); // Limpa o buffer
System.out.println("Digite uma linha de texto: ");
String text = scanner.nextLine();
System.out.println("Número: " + number);
System.out.println("Texto: " + text);
}
}
Copiar
Neste exemplo, após ler um número inteiro do usuário com nextInt()
, chamamos nextLine()
para limpar o buffer antes de ler uma linha de texto com nextLine()
. Isso garante que a linha de texto não seja contaminada por qualquer dado residual no buffer após a chamada para nextInt()
.
Espero que este artigo tenha ajudado a entender como e por que limpar o buffer ao usar a classe Scanner
em Java!