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

Различные сценарии, вызывающие NoSuchElementException, в Java

Исключения - это проблемы, возникающие в процессе выполнения программы (ошибки времени выполнения). При возникновении исключения программа внезапно завершает свою работу, и код, следующий за строкой, вызвавшей исключение, никогда не будет выполнен. Каждое исключение представлено своей собственной классом.

Исключение NoSuchElementException

Это исключение времени выполнения, то есть оно возникает во время выполнения.

Если вы пытаетесь получить элемент из пустого объекта или использовать методы доступа к содержимому набора, массива или другого объекта с помощью Enumeration, Iterator или tokenizer (например, next() или nextElement()), то попытка получить следующий элемент после достижения конца объекта (набора, массива или другого объекта) вызовет NoSuchElementException.

情景

СценарийМетод nextElement() для Enumeration - Vector

Используя этот объект, можно последовательно получать элементы с помощью метода nextElement().

Если этот метод вызывается на пустом наборе данных или после достижения конца набора данных, будет сгенерирован NoSuchElementException в режиме выполнения.

Пример

import java.util.Enumeration;
import java.util.Vector;
public class EnumExample {
   public static void main(String args[]) {
      //Инстанцирование вектора
      Vector<Integer> vec = new Vector<Integer>();
      //Заполнение вектора
      vec.add(1254);
      vec.add(4587);
      //Использование枚герации для поиска элементов
      Enumeration<Integer> en = vec.elements();
      System.out.println(en.nextElement());
      System.out.println(en.nextElement());
      //After reaching the end, retrieve the next element
      System.out.println(en.nextElement());
   }
}

Run-time error

1254
4587
Exception в потоке "main" java.util.NoSuchElementException: Vector Enumeration
   at java.util.Vector$1.nextElement(Unknown Source)
   at MyPackage.EnumExample.main(EnumExample.java:18)

Методы nextElement() и nextToken() в StringTokenizer -Класс StringTokenizer принимает String и delimiter в качестве параметра之一 своего конструктора, и каждый раз, когда встречается заданный разделитель, данная строка разбивается на несколько малых маркеров.

Методы nextToken() и nextElement() возвращает следующий токен из генератора токенов. Если вызывать эти методы на пустом объекте Tokenizer или после завершения работы, будет сгенерирован NoSuchElementException в режиме выполнения.

Пример

import java.util.StringTokenizer;
public class StringTokenizerExample{
   public static void main(String args[]) {
      String str = "Hello how are you";
      //Instantiate StringTokenizer class
      StringTokenizer tokenizer = new StringTokenizer(str, " ");
      //Print all tokens
      System.out.println(tokenizer.nextToken());
      System.out.println(tokenizer.nextToken());
      System.out.println(tokenizer.nextToken());
      System.out.println(tokenizer.nextToken());
      //After reaching the end, get the next token
      tokenizer.nextToken();
      tokenizer.nextElement();
   }
}

Run-time error

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)

Метод next() Iterator -Java предоставляет классы Iterator и ListIterator для получения элементов объектов набора. Метод next() Iterator и ListIterator возвращает следующий элемент набора.

Если эти методы вызываются на пустом наборе или вызывается NoSuchElementException в конце, то в режиме выполнения генерируется.

Таким образом, если этот метод вызывается на пустом объекте или в месте его объявления, метод previous() ListIterator возвращает предыдущий элемент набора и генерирует NoSuchElementException в режиме выполнения.

Пример

import java.util.ArrayList;
import java.util.Iterator;
public class NextElementExample{
   public static void main(String args[]) {
      //Инстанцирование объекта ArrayList
      ArrayList<String> list = new ArrayList<String>();
      //Заполнение ArrayList
      list.add("apples");
      list.add("mangoes");
      list.add("oranges");
      //Получение объекта Iterator ArrayList
      Iterator it = list.iterator();
      System.out.println(it.next());
      System.out.println(it.next());
      System.out.println(it.next());
      //After reaching the end, retrieve the next element
      it.next();
   }
}

Run-time error

apples
mangoes
oranges
Exception in thread "main" java.util.NoSuchElementException
   at java.util.ArrayList$Itr.next(Unknown Source)
   at MyPackage.NextElementExample.main(NextElementExample.java:19)

Пример (метод previous())

import java.util.ArrayList;
import java.util.ListIterator;
public class NextElementExample{
   public static void main(String args[]) {
      //Инстанцирование объекта ArrayList
      ArrayList<String> list = new ArrayList<String>();
      //Заполнение ArrayList
      list.add("apples");
      list.add("mangoes");
      list.add("oranges");
      //Получение объекта Iterator 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());
   }
}

Результат вывода

oranges
mangoes
apples
Exception in thread "main" java.util.NoSuchElementException
   at java.util.ArrayList$ListItr.previous(Unknown Source)
   at MyPackage.NextElementExample.main(NextElementExample.java:22)
Скорее всего, вам понравится