Keine solche Elementausnahme bei der Verwendung von Scanner in Java

Sheeraz Gul 12 Oktober 2023
Keine solche Elementausnahme bei der Verwendung von Scanner in Java

Dieses Tutorial demonstriert die Lösung des Fehlers NoSuchElementException bei der Verwendung des Scanners in Java.

Keine solche Elementausnahme bei der Verwendung von Scanner in Java

Die Scanner-Klasse wird verwendet, um die Benutzereingabe in einem Java-Programm abzurufen. Es verwendet mehrere Hilfsmethoden wie next(), nextInt() usw.

Beim Arbeiten mit diesen Methoden kann der Scanner einen NoSuchElementException-Fehler in Java werfen. Der Grund für diese Ausnahmen ist unten angegeben:

  1. Angenommen, wir haben zwei Scanner-Objekte zum Abrufen von Benutzereingaben; Wenn wir einen Scanner schließen und die Eingabe vom anderen erhalten, wird die NoSuchElementExcpetion ausgelöst. Dies liegt daran, dass beim Schließen eines Scanners der Eingabestream geschlossen wird. Aus diesem Grund kann der andere Scanner nicht aus demselben Eingabestrom lesen, da die Methode close() auch den Eingabestrom System.in schließt.

    Hier ist ein Beispiel:

    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();
      }
    }
    

    Der obige Code wirft die NoSuchElementException. Siehe Ausgabe:

    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)
    

    Um dieses Problem zu lösen, können wir nur einen Scanner verwenden. Dies gilt auch, wenn ein Scanner in einem Verfahren und der andere in einem anderen Verfahren verwendet wird.

    Die Methode close() schließt alle Eingabeströme.

  2. Während der Verwendung von Scanner lesen wir die Zeile, und wenn keine Zeile mehr zum Lesen vorhanden ist, wird die NoSuchElementException ausgelöst. Siehe Beispiel:

    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());
      }
    }
    

    Um das Problem zu lösen, verwenden wir hasNextLine(), um zu prüfen, ob der Scanner die nächste Zeile hat. Es gibt true zurück, wenn der Scanner die nächste Zeile hat; andernfalls wird false zurückgegeben.

    Siehe Beispiel:

    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());
        }
      }
    }
    

    Die Ausgabe für diesen Code ist:

    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

Verwandter Artikel - Java Error