No hay tal excepción de elemento al usar Scanner en Java
Este tutorial demostrará cómo resolver el error NoSuchElementException
al usar el escáner en Java.
No hay tal excepción de elemento al usar Scanner en Java
La clase Scanner se utiliza para obtener la entrada del usuario en un programa Java. Utiliza varios métodos de utilidad como next()
, nextInt()
, etc.
Al trabajar con estos métodos, el escáner puede arrojar un error NoSuchElementException
en Java. El motivo de estas excepciones se indica a continuación:
-
Supongamos que tenemos dos objetos Scanner para obtener la entrada del usuario; si cerramos un Escáner y obtenemos la entrada del otro, arrojará el
NoSuchElementExcpetion
. Esto se debe a que cuando cerramos un escáner, cerrará el flujo de entrada; es por eso que el otro escáner no puede leer del mismo flujo de entrada porque el métodoclose()
también cierra el flujo de entradaSystem.in
.Aquí hay un ejemplo:
package delftstack; import java.util.*; public class Example { public static void main(String args[]) { String DemoString = "Hello, This is delftstack.com"; Scanner DemoScanner1 = new Scanner(System.in); Scanner DemoScanner2 = new Scanner(System.in); DemoScanner1.close(); DemoScanner2.next(); } }
El código anterior arrojará la
NoSuchElementException
. Ver salida:Exception in thread "main" java.util.NoSuchElementException at java.base/java.util.Scanner.throwFor(Scanner.java:937) at java.base/java.util.Scanner.next(Scanner.java:1478) at delftstack.Example.main(Example.java:13)
Para resolver este problema, podemos usar solo un escáner. Esto también se aplica si se usa un escáner en un método y el otro en otro método.
El método
close()
cerrará todos los flujos de entrada. -
Mientras usamos Scanner, estamos leyendo la línea, y si no queda ninguna línea para leer, lanzará la
NoSuchElementException
. Ver ejemplo:package delftstack; import java.util.*; public class Example { public static void main(String args[]) { String DemoString = "Hello, This is delftstack.com"; Scanner DemoScanner1 = new Scanner(DemoString); System.out.println(DemoScanner1.nextLine()); System.out.println(DemoScanner1.nextLine()); } }
Para resolver el problema, usamos
hasNextLine()
para verificar si el escáner tiene la siguiente línea. Devuelve verdadero si el escáner tiene la siguiente línea; de lo contrario, devuelve falso.Ver ejemplo:
package delftstack; import java.util.*; public class Example { public static void main(String args[]) { String DemoString = "Hello, This is delftstack.com"; Scanner DemoScanner1 = new Scanner(DemoString); while (DemoScanner1.hasNextLine()) { System.out.println(DemoScanner1.nextLine()); } } }
La salida para este código es:
Hello, This is delftstack.com
Sheeraz is a Doctorate fellow in Computer Science at Northwestern Polytechnical University, Xian, China. He has 7 years of Software Development experience in AI, Web, Database, and Desktop technologies. He writes tutorials in Java, PHP, Python, GoLang, R, etc., to help beginners learn the field of Computer Science.
LinkedIn FacebookArtículo relacionado - Java Error
- Arreglar Java fue iniciado por el código de salida devuelto = 1
- Arreglar JAVA_HOME no se puede determinar a partir del error de registro en R
- Arreglar java.io.IOException: No queda espacio en el dispositivo en Java
- Arreglar Java.IO.NotSerializableException en Java
- Arreglar Java.Lang.IllegalStateException de Android: no se pudo ejecutar el método de la actividad
- Arreglar Java.Lang.NoClassDefFoundError: No se pudo inicializar el error de clase