De P.40 del libro de texto 'Estructuras de Datos y Algoritmos en Java, 6 / E' (el código se revisó ligeramente):
Scanner scanner = new Scanner(System.in);
System.out.print("Please enter an integer: ");
while (!scanner.hasNextInt()) {
scanner.nextLine();
System.out.print("Invalid int; pls enter an int: ");
}
int i = scanner.nextInt();
System.out.print(i);
Si escribe un valor no entero (Es decir: 1,0) por System.in, sería entrar en el cuerpo del bucle, mientras que desde el booleano de !scanner.hasNextInt()
que es cierto.
Sin embargo no entiendo la sintaxis de este ser autor en otra línea de scanner.nextLine();
dentro del bucle, mientras que en la línea 4, tampoco genera algo? ¿Por qué no funciona el programa si eliminar la scanner.nextLine();
línea? (y de alguna manera la memoria del PC casi se llena después de eliminarlo ..)
Lo dijo @Guy es correcta. La hasNext
llamada de función no hace nada para avanzar el puntero de entrada. hasNextInt
comprueba si su próxima entrada es un número entero, pero para avanzar a la siguiente línea después de esta entrada, es necesario llamar a una next
función. De lo contrario, siempre va a controlar hasNextInt
en su entrada no entero, de entrar en un bucle infinito, por lo que su uso de memoria es muy alta.