1
resposta

[Sugestão] Abordar problema de leitura do Scanner

Gostaria de sugerir que fosse abordado na aula sobre Scanner, que, dependendo da ordem em que tipos diferentes são lidos, pode acarretar em erro de leitura.

Por exemplo, o código

int idade = Scanner.nextInt();
String nome = Scanner.nextLine();
double altura = Scanner.nextDouble();

irá gerar um erro de tempo de execução. Mais especificamente, a leitura da String será "pulada". Isso acontece, pois o caractere de nova linha, ou "\n", (equivalente a pressionar a tecla "Enter") não é capturada pelo nextInt(), mas permanece no buffer (fila de entrada do teclado). Logo, o nextLine() entende que esse "\n" foi intencionalmente inserido pelo usuário e guarda essa informação na variável nome.

Uma forma de "resolver" essa questão é realizando uma leitura "vazia" sempre depois de qualquer leitura numérica (int ou double), para pular o caractere de nova linha.

Então o código corrigido seria:

int idade = Scanner.nextInt();
Scanner.nextLine();
String nome = Scanner.nextLine();
double altura = Scanner.nextDouble();
// como não há leitura de String após altura, a leitura vazia é opcional neste caso
1 resposta

Oi, Claudio! Tudo bem?

Muito obrigada pela sugestão, a utilização da classe Scanner no Java é de fato um ponto muito importante e esse comportamento do Scanner pode realmente causar confusão, especialmente para quem está começando a programar. Sua contribuição ativa para a comunidade é muito importante e o seu feedback é extremamente relevante para nós! Caso tenha restado alguma dúvida em relação a qualquer conteúdo do curso ou atividade, não hesite em perguntar, estou disponível e ficarei super feliz em poder ajudar!

Um forte abraço e bons estudos!