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

Diversi scenari che causano NoSuchElementException in Java

Un'eccezione è un problema che si verifica durante l'esecuzione del programma (errore di runtime). Quando si verifica un'eccezione, il programma si interrompe bruscamente e il codice dopo la riga che ha generato l'eccezione non verrà mai eseguito. Ogni eccezione è rappresentata dalla sua classe specifica.

Eccezione NoSuchElementException

Questa è un'eccezione di runtime, ossia si verifica durante l'esecuzione.

Se provi a ottenere un elemento da un oggetto vuoto, o a accedere ai contenuti di un set, un array o un altro oggetto utilizzando metodi di accesso come next() o nextElement() dell'Enumeration, Iterator o tokenizer, allora cercare di ottenere l'elemento successivo dopo aver raggiunto la fine dell'oggetto (set, array o altro oggetto) genererà NoSuchElementException.

Scena

Metodo nextElement() dell'Enumeration - VectorLe collezioni come HashTable hanno un metodo chiamato elements(), che restituisce un oggetto Enumeration (interfaccia) che contiene tutti gli elementi della raccolta.

Utilizzando questo oggetto, è possibile ottenere gli elementi uno dopo l'altro utilizzando il metodo nextElement().

Se si chiama questo metodo su un set vuoto o dopo aver raggiunto la fine del set, verrà generato un NoSuchElementException durante l'esecuzione.

Esempio

import java.util.Enumeration;
import java.util.Vector;
public class EnumExample {
   public static void main(String args[]) {
      // Eseguire l'istanziazione della coda
      Vector<Integer> vec = new Vector<Integer>();
      // Riempiere la coda
      vec.add(1254);
      vec.add(4587);
      // Utilizzare l'enumerazione per recuperare gli elementi
      Enumeration<Integer> en = vec.elements();
      System.out.println(en.nextElement());
      System.out.println(en.nextElement());
      //Ricerca dell'elemento successivo dopo aver raggiunto la fine
      System.out.println(en.nextElement());
   }
}

Errore in esecuzione

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)

Metodi nextElement() e nextToken() di StringTokenizer -La classe StringTokenizer accetta String e delimiter come parametri del costruttore, dividendo il dato String in vari segmenti ogni volta che si incontra il delimitatore specificato.

Questi metodi nextToken() e nextElement() restituiscono il token successivo nel generatore di token. Se si chiama questi metodi su un oggetto Tokenizer vuoto o se si chiama NoSuchElementException alla fine, verrà generato un NoSuchElementException durante l'esecuzione.

Esempio

import java.util.StringTokenizer;
public class StringTokenizerExample{
   public static void main(String args[]) {
      String str = "Hello how are you";
      //Esempio di istanziazione della classe StringTokenizer
      StringTokenizer tokenizer = new StringTokenizer(str, " ");
      //Stampare tutti i token
      System.out.println(tokenizer.nextToken());
      System.out.println(tokenizer.nextToken());
      System.out.println(tokenizer.nextToken());
      System.out.println(tokenizer.nextToken());
      //Ricezione del token successivo dopo aver raggiunto la fine
      tokenizer.nextToken();
      tokenizer.nextElement();
   }
}

Errore in esecuzione

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)

Il metodo next() di Iterator -Java fornisce le classi Iterator e ListIterator per recuperare gli elementi degli oggetti di集合. Il metodo next() di Iterator e ListIterator restituisce l'elemento successivo dell'insieme.

Se si chiamano questi metodi su un insieme vuoto o si chiama NoSuchElementException alla fine, viene generato in esecuzione.

Allo stesso modo, se si chiama questo metodo su un oggetto vuoto o nel suo punto di dichiarazione, il metodo previous() di ListIterator restituirà l'elemento precedente dell'insieme e genererà NoSuchElementException in esecuzione.

Esempio

import java.util.ArrayList;
import java.util.Iterator;
public class NextElementExample{
   public static void main(String args[]) {
      //Istanzia l'oggetto ArrayList
      ArrayList<String> list = new ArrayList<String>();
      //Riempi l'ArrayList
      list.add("mele");
      list.add("mango");
      list.add("arance");
      //Ottieni l'oggetto Iterator dell'ArrayList
      Iterator it = list.iterator();
      System.out.println(it.next());
      System.out.println(it.next());
      System.out.println(it.next());
      //Ricerca dell'elemento successivo dopo aver raggiunto la fine
      it.next();
   }
}

Errore in esecuzione

mele
mango
arance
Exception in thread "main" java.util.NoSuchElementException
   at java.util.ArrayList$Itr.next(Unknown Source)
   at MyPackage.NextElementExample.main(NextElementExample.java:19)

Esempio (metodo previous())

import java.util.ArrayList;
import java.util.ListIterator;
public class NextElementExample{
   public static void main(String args[]) {
      //Istanzia l'oggetto ArrayList
      ArrayList<String> list = new ArrayList<String>();
      //Riempi l'ArrayList
      list.add("mele");
      list.add("mango");
      list.add("arance");
      //Ottieni l'oggetto Iterator dell'ArrayList
      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());
   }
}

risultato di output

arance
mango
mele
Exception in thread "main" java.util.NoSuchElementException
   at java.util.ArrayList$ListItr.previous(Unknown Source)
   at MyPackage.NextElementExample.main(NextElementExample.java:22)