Java - Ayuda con el método hasNext()

 
Vista:

Ayuda con el método hasNext()

Publicado por Aprendiz (5 intervenciones) el 25/07/2021 15:49:20
1
2
3
4
5
6
7
8
9
10
11
12
public class Incremento {
 public static void main (String [] args){
Scanner input = new Scanner(System.in);
System.out.println("Escriba");
 
	if(input.hasNext()){
			System.out.println("hola");
	 }else {
		 System.out.println("adiós");
	 }
	 }
 	}


Tengo un problema con usar correctamente este método de la clase Scanner. Tengo entendido que retorna un booleano, el problema es que sólo me retorna true si escribo una palabra, pero si no escribo nada (pulsando dos veces intro) nunca me imprime ese ''adiós'', es decir no contempla ese retorno del false que es lo que busco. . . Alguien sabe por qué sucede esto?

Muchísimas gracias por vuestro tiempo!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Kabuto
Val: 3.428
Oro
Ha mantenido su posición en Java (en relación al último mes)
Gráfica de Java

Ayuda con el método hasNext()

Publicado por Kabuto (1381 intervenciones) el 26/07/2021 01:35:24
hasNext() no está pensado para usar con teclado. Se puede usar, pero no va a funcionar como esperas.

Si miras la docu de Java de la clase Scanner

1
2
3
4
public boolean hasNext()
Returns true if this scanner has another token in its input.
This method may block while waiting for input to scan.
The scanner does not advance past any input.

Al usarlo con teclado, solo va a evaluar si tiene un input válido.
Si no lo tiene, bloquea el programa esperando recibir ese input. Una simple pulsación de la tecla intro, no cuenta como input válido, porque no recibe nada.
Espera a recibir algo, hay que darle una cadena... y claro entonces siempre te va a devolver true.

Es decir, al usarlo con teclado, técnicamente es imposible conseguir que te devuelva false, porque siempre se va a bloquear a la espera de recibir input, un input que siempre va a implicar poder devolver true.


La clase Scanner no solo trabaja con teclado, también puede usar como input un fichero o una cadena String.

Entonces, el hasNext() está más pensado para usarlo como condicional en un bucle.
Por ejemplo para recorrer cada token de una cadena, mientras hasNext() devuelva true, es que hay tokens para mostrar y podemos acceder a cada uno de ellos, usando next()

Cuando no queden tokens para recorrer en el input proporcionado al Scanner, entonces será cuando hasNext() devuelva false y se pondrá fin al bucle.

Por ejemplo:

1
2
3
4
5
6
7
8
9
10
public static void main(String[] args) {
        Scanner input = new Scanner("Cascaras de higos, cascaras de nueces");
        System.out.println("Palabras/tokens encontradas en la cadena usada como input:");
 
	    while (input.hasNext()) { //Se repite hasta que hasNext() devuelva FALSE
	        System.out.println(">>> " + input.next());
	    }
 
	    System.out.println("\n\n\tFIN DE PROGRAMA");
	 }

En pantalla nos dará este resultado:

1
2
3
4
5
6
7
8
9
10
Palabras/tokens encontradas en la cadena usada como input:
>>> Cascaras
>>> de
>>> higos,
>>> cascaras
>>> de
>>> nueces
 
 
	FIN DE PROGRAMA
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar