English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Different scenarios that cause NoSuchElementException in Java

Eine Ausnahme ist ein Problem, das während der Ausführung des Programms auftritt (Laufzeitfehler). Wenn eine Ausnahme auftritt, wird das Programm plötzlich beendet und der Code nach der Ausnahmezeile wird niemals ausgeführt. Jede Ausnahme wird durch ihre eigene Klasse dargestellt.

NosuchElement-Exception

Dies ist eine Laufzeit-Exception, die während der Ausführung auftritt.

Wenn Sie versuchen, ein Element aus einem leeren Objekt abzurufen oder den Inhalt einer Sammlung, eines Arrays oder eines anderen Objekts durch Enumeration, Iterator oder tokenizer-Methoden (z.B. next() oder nextElement()) abzurufen, wird NoSuchElementException generiert, wenn versucht wird, nach dem Ende des Objekts (Sammlung, Array oder anderes Objekt) den nächsten Element zu erhalten.

Szenario

Die nextElement()-Methode der Enumeration-VectorKollektionen wie HashTable haben eine Methode namens elements(), die ein Enumeration-(Interface)-Objekt zurückgibt, das alle Elemente der Sammlung enthält.

Mit diesem Objekt können Elemente nacheinander mit dem nextElement()-Methoden abgerufen werden.

Wird auf diesem Methodenaufruf auf einem leeren Set aufgerufen oder wird NoSuchElementException nach Erreichen des Endes des Sets generiert.

Beispiel

import java.util.Enumeration;
import java.util.Vector;
public class EnumExample {
   public static void main(String args[]) {
      //Vector instanziieren
      Vector<Integer> vec = new Vector<Integer>(
      //Füllen des Vektors
      vec.add(1254);
      vec.add(4587);
      //Elemente mit Enumeration abrufen
      Enumeration<Integer> en = vec.elements();
      System.out.println(en.nextElement());
      System.out.println(en.nextElement());
      //Nach dem Erreichen des Endes der Liste wird der nächste Element abgerufen
      System.out.println(en.nextElement());
   }
}

Runtime-Exception

1254
4587
Exception in thread "main" java.util.NoSuchElementException: Vector Enumeration
   at java.util.Vector$1.nextElement(Unknown Source)
   at MyPackage.EnumExample.main(EnumExample.java:18)

Die Methoden nextElement() und nextToken() der StringTokenizer -Die StringTokenizer-Klasse akzeptiert String und delimiter als Parameter eines ihrer Konstruktoren, und teilt den angegebenen String bei jedem Auftreten des angegebenen Delimiters in mehrere kleine Markierungen.

Diese nextToken()- und nextElement()-Methoden der StringTokenizer-Klasse geben den nächsten Token aus dem Tokenizer-Generator zurück. Wird auf einem leeren StringTokenizer-Objekt aufgerufen oder wird NoSuchElementException beim Ende aufgerufen, wird bei der Laufzeit NoSuchElementException generiert.

Beispiel

import java.util.StringTokenizer;
public class StringTokenizerExample{
   public static void main(String args[]) {
      String str = "Hello how are you";
      //Instanziierung der StringTokenizer-Klasse
      StringTokenizer tokenizer = new StringTokenizer(str, " ");
      //Alle Token ausgeben
      System.out.println(tokenizer.nextToken());
      System.out.println(tokenizer.nextToken());
      System.out.println(tokenizer.nextToken());
      System.out.println(tokenizer.nextToken());
      //Nach dem Erreichen des Endes wird das nächste Token abgerufen
      tokenizer.nextToken();
      tokenizer.nextElement();
   }
}

Runtime-Exception

Hello
how
are
you
Exception im Thread "main" java.util.NoSuchElementException
   at java.util.StringTokenizer.nextToken(Unknown Source)
   at MyPackage.StringTokenizerExample.main(StringTokenizerExample.java:16)

next() - Methode des Iterators -Java bietet die Klassen Iterator und ListIterator an, um die Elemente der Sammlungsobjekte abzurufen. Die next() - Methode von Iterator und ListIterator gibt das nächste Element der Sammlung zurück.

Wenn diese Methoden auf einer leeren Sammlung aufgerufen werden oder wenn NoSuchElementException am Ende aufgerufen wird, wird ein Laufzeitfehler erzeugt.

Gleichzeitig wird die Methode previous() der ListIterator, wenn sie auf einem leeren Objekt oder an seiner Deklarationsposition aufgerufen wird, den vorherigen Element der Sammlung zurückgeben und einen NoSuchElementException beim Laufzeitfehler erzeugen.

Beispiel

import java.util.ArrayList;
import java.util.Iterator;
public class NextElementExample{
   public static void main(String args[]) {
      //ArrayList-Objekt instanziieren
      ArrayList<String> list = new ArrayList<String>();
      //ArrayList füllen
      list.add("Äpfel");
      list.add("Mangos");
      list.add("Orangen");
      //ArrayList-Iterator-Objekt erhalten
      Iterator it = list.iterator();
      System.out.println(it.next());
      System.out.println(it.next());
      System.out.println(it.next());
      //Nach dem Erreichen des Endes der Liste wird der nächste Element abgerufen
      it.next();
   }
}

Runtime-Exception

Äpfel
Mangos
Orangen
Exception im Thread "main" java.util.NoSuchElementException
   at java.util.ArrayList$Itr.next(Unknown Source)
   bei MyPackage.NextElementExample.main(NextElementExample.java:19)

Beispiel (previous() Methode)}

import java.util.ArrayList;
import java.util.ListIterator;
public class NextElementExample{
   public static void main(String args[]) {
      //ArrayList-Objekt instanziieren
      ArrayList<String> list = new ArrayList<String>();
      //ArrayList füllen
      list.add("Äpfel");
      list.add("Mangos");
      list.add("Orangen");
      //ArrayList-Iterator-Objekt erhalten
      ListIterator<String> it = list.listIterator();
      it.next();
      it.next();
      it.next();
      System.out.println(it.previous());
      System.out.println(it.previous());
      System.out.println(it.previous());
      System.out.println(it.previous());
   }
}

Ausgaberesultat

Orangen
Mangos
Äpfel
Exception im Thread "main" java.util.NoSuchElementException
   bei java.util.ArrayList$ListItr.previous(Unbekannte Quelle)
   bei MyPackage.NextElementExample.main(NextElementExample.java:22)