Sou iniciante em Java e estou tentando aprender a classe Scanner, mas tem algumas coisas que não consigo entender:
Considerem o código abaixo:
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
System.out.println("teste-01");
Scanner scanner = new Scanner(System.in);
while(true) {
System.out.println("teste-02");
if(scanner.hasNextInt()) {
System.out.println("valor digitado: " + scanner.nextInt());
break;
}
else {
System.out.println("digite um numero inteiro");
}
}
}
}
A saida é:
teste-01
teste-02
3 //número que digitei
valor digitado: 3
1- Por que ele está bloqueando e esperando um entrada em scanner.hasNextInt() sendo que na documentação não diz que ele vai bloquear?
https://docs.oracle.com/javase/8/docs/api/java/util/Scanner.html#hasNextInt--
2- Por que ele está entrando em loop infinito quando eu digito um caracter ou número com ponto(número float/double)? Parece que scanner.hasNextInt() só bloquea esperando uma entrada do teclado na primeira vez e depois não espera mais. Não estou entendendo isso.
3- Como eu faço para arrumar isso? Eu quero que ele fique pedindo para o usuário digitar um número inteiro até que ele realmente digite e então termine.