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