English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
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.
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.
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(); } }
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)
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