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

Warum ist NoSuchElementException aufgetreten und wie wird es in Java behoben?

Warum ist NoSuchElementException aufgetreten und wie wird es in Java behoben?

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

Ursachen der NoSuchElementException

Dies ist eine Laufzeit-Exception, das bedeutet, dass sie während der Ausführung auftritt.

Wenn Sie versuchen, ein Element von einem leeren Objekt zu erhalten oder den Inhalt einer Sammlung, eines Arrays oder eines anderen Objekts über die Accessorenmethoden von Enumeration, Iterator oder tokenizer (z.B. next() oder nextElement()) abzurufen, wird eine NoSuchElementException generiert, wenn versucht wird, nach Erreichen des Endes des Objekts (Sammlung, Array oder anderes Objekt) den nächsten Element zu erhalten.

Zum Beispiel,

  • Wenn das nextElement()-Verfahren der Enumeration-Klasse auf einem leeren Enumeration-Objekt aufgerufen wird oder wenn die aktuelle Position am Ende der Enumeration ist, wird bei der Laufzeit eine NoSuchElementException generiert.

  • Wenn das nextElement()- oder nextToken()-Verfahren der StringTokenizer-Klasse auf einem leeren StringTokenizer-Objekt verwendet wird oder wenn die aktuelle Position am Ende des StringTokenizer ist, wird bei der Laufzeit eine NoSuchElementException generiert.

  • wenn die Methode next() der Klasse Iterator oder ListIterator auf einem leeren Iterator / aufgerufen wird, oder wenn die aktuelle Position am Ende ist, wird bei der Laufzeit Iterator generiert / ListIterator NosuchElementException.

  • Ähnlich, wenn die Methode previous() der Klasse ListIterator auf einem leeren ListIterator-Objekt aufgerufen wird, oder wenn die aktuelle Position am Anfang des ListIterator ist, 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";
      //Instantiierung der StringTokenizer-Klasse
      StringTokenizer tokenizer = new StringTokenizer(str, " ");
      //Alle Tokens ausgeben
      System.out.println(tokenizer.nextToken());
      System.out.println(tokenizer.nextToken());
      System.out.println(tokenizer.nextToken());
      System.out.println(tokenizer.nextToken());
      //Das Erhalten des nächsten Tokens nach dem Erreichen des Endes
      tokenizer.nextToken();
      tokenizer.nextElement();
   }
}

Laufzeitfehler

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

Verarbeitung/Beheben von NosuchElementException

Fast alle Klassen, deren Zugriffsmethoden NoSuchElementException verursachen, enthalten eigene Methoden, um zu überprüfen, ob das Objekt (Sammlung, Token-Generator usw.) weitere Elemente enthält.

Zum Beispiel-

  • Die Klasse Enumeration enthält die Methode hasMoreElements(), die true zurückgibt, wenn das aktuelle Objekt nach seiner aktuellen Position weitere Elemente enthält (sonst false).

  • Die Klasse StringTokenizer enthält die Methoden hasMoreTokens() und hasMoreElements(), die true zurückgeben, wenn das aktuelle Objekt nach seiner aktuellen Position weitere Elemente enthält (sonst false).

  • Die Klasse Iterator enthält die Methode hasNext(), die true zurückgibt, wenn der aktuelle Iterator neben seiner aktuellen Position weitere Elemente enthält (sonst false).

  • Die Klasse ListIterator enthält die Methode hasPrevious(), die true zurückgibt, wenn der aktuelle Iterator vor seiner aktuellen Position weitere Elemente enthält (sonst false).

Verwenden Sie diese Methoden im while-Loop, um zu überprüfen, ob das entsprechende Objekt mehr Elemente enthält, und drucken Sie nur, wenn die Bedingung true ist./Zugriff auf Elemente. Dies kann verhindern, dass auf Elemente zugegriffen wird, wenn im Objekt keine Elemente vorhanden sind oder das Ende erreicht ist, indem die Zugriffsmethoden des Akzessors verwendet werden.

Methode hasMoreElements() der Enumeration-Klasse

import java.util.Enumeration;
import java.util.Vector;
public class EnumExample {
   public static void main(String args[]) {
      //Instantiierung eines Vectors
      Vector<Integer> vec = new Vector<Integer>( );
      //Den Vector füllen
      vec.add(1254);
      vec.add(4587);
      //Elemente mit Enumeration abrufen
      Enumeration<Integer> en = vec.elements();
      while(en.hasMoreElements()) {
         System.out.println(en.nextElement());
      }
   }
}

Ausgaberesultat

1254
4587

StringTokenizer-Klasse-Methode nextMoreTokens()-

import java.util.StringTokenizer;
public class StringTokenizerExample{
   public static void main(String args[]) {
      String str = "Hello how are you";
      //Instantiierung der StringTokenizer-Klasse
      StringTokenizer tokenizer = new StringTokenizer(str, " ");
      //Alle Tokens ausgeben
      while(tokenizer.hasMoreTokens()) {
         System.out.println(tokenizer.nextToken());
      }
   }
}

Ausgaberesultat

Hello
how
are
you

Iterator-Klasse-Methode hasNext()-

import java.util.ArrayList;
import java.util.Iterator;
public class NextElementExample{
   public static void main(String args[]) {
      //Instantiating an ArrayList object
      ArrayList<String> list = new ArrayList<String>();
      //populating the ArrayList
      list.add("apples");
      list.add("mangoes");
      list.add("oranges");
      //Getting the Iterator object of the ArrayList
      Iterator it = list.iterator();
      while(it.hasNext()) {
         System.out.println(it.next());
      }
   }
}

Ausgaberesultat

Apfel
Mango
Orange

ListIterator classes hasPrevious() method-

import java.util.ArrayList;
import java.util.ListIterator;
public class NextElementExample{
   public static void main(String args[]) {
      //Instantiating an ArrayList object
      ArrayList<String> list = new ArrayList<String>();
      //populating the ArrayList
      list.add("apples");
      list.add("mangoes");
      list.add("oranges");
      //Getting the Iterator object of the ArrayList
      ListIterator<String> it = list.listIterator();
      while(it.hasNext()) {
         it.next();
      }
      while(it.hasPrevious()) {
         System.out.println(it.previous());
      }
   }
}

Ausgaberesultat

Orange
Mango
Apfel
Vielleicht gefällt dir auch