No hay tal excepción de elemento al usar Scanner en Java

Sheeraz Gul 12 octubre 2023
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:

  1. 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étodo close() también cierra el flujo de entrada System.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.

  2. 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 Gul avatar Sheeraz Gul avatar

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 Facebook

Artículo relacionado - Java Error