Quiero que el usuario sólo para entrar en su edad. Así que hice este programa:
Scanner keyb = new Scanner(System.in);
int age;
while(!keyb.hasNextInt())
{
keyb.next();
System.out.println("How old are you ?");
}
age = keyb.nextInt();
System.out.println("you are" + age + "years old");
He encontrado la manera de evitar que usuarios puedan usar cadena utilizando el bucle while con keyb.hasNextInt (), pero la forma de evitar que el uso del espacio en blanco o la entrada de más de entrada que su edad?
Por ejemplo, yo quiero evitar este tipo de escribir "12 m" o "12 12"
Además, ¿cómo puedo borrar todos los datos existentes en la memoria intermedia? Estoy frente a un bucle infinito cuando trato de usar esto:
while(keyb.hasNext())
keyb.next();
Su problema es que el comportamiento predeterminado de Scanner
es utilizar cualquier espacio en blanco como delimitador. Esto incluye espacios. Esto significa que a 3 a
es en realidad tres fichas, no uno. Se puede cambiar el delimitador para una nueva línea de manera que a 3 a
se convierte en una sola expresión, que a su vez devolver false para hasNextInt
.
También he añadido una pregunta inicial, ya que en el ejemplo de la primera entrada fue tomada antes de hacer ninguna pregunta.
Scanner keyb = new Scanner(System.in);
keyb.useDelimiter("\n"); // You can try System.lineSeparator() but it didn't work in IDEA
int age;
System.out.println("How old are you?");
while(!keyb.hasNextInt())
{
keyb.next();
System.out.println("No really. How old are you?");
}
age = keyb.nextInt();
System.out.println("You are " + age + " years old");