English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
NoSuchElementException의 원인은 무엇이고, Java에서 어떻게 고칠 수 있나요?
예외는 프로그램 실행 중 발생하는 문제(런타임 오류)입니다. 예외가 발생하면 프로그램이 갑자기 중단되고, 예외가 생성된 라인 이후의 코드는 결코 실행되지 않습니다. 각 예외는 자신의 클래스로 표현됩니다.
이는 실행 중 발생하는 런타임 예외입니다.
빈 객체에서 요소를 가져오려고 시도하거나, Enumeration, Iterator 또는 tokenizer의 접근자 메서드(예: next() 또는 nextElement())를 사용하여 셋, 배열 또는 다른 객체의 내용을 접근하면, 객체(셋, 배열 또는 다른 객체)의 끝에 도달한 후 다음 요소를 가져오려고 시도하면 NoSuchElementException이 생성됩니다.
예를 들어:
빈 Enumeration 객체에 Enumeration 클래스의 nextElement() 메서드를 호출하거나, 현재 위치가 Enumeration의 끝에 있다면, 실행 중 NosuchElementException이 생성됩니다.
빈 StringTokenizer 객체에 StringTokenizer 클래스의 nextElement()와 nextToken() 메서드를 사용하거나, 현재 위치가 StringTokenizer의 끝에 있다면, 실행 중 NosuchElementException이 생성됩니다.
如果Iterator或ListIterator 클래스의 next() 메서드가空的Iterator / ListIterator上调用,或者如果当前位置在末尾,则在运行时生成Iterator / listIterator NosuchElementException。
类似地,如果在空的ListIterator对象上调用ListIterator类的previous()方法,或者如果当前位置是ListIterator的开始,则在运行时会生成NosuchElementException。
import java.util.StringTokenizer; public class StringTokenizerExample{ public static void main(String args[]) { String str = "Hello how are you"; //StringTokenizer 클래스를 인스턴스화 StringTokenizer tokenizer = new StringTokenizer(str, " "); //모든 토큰을 인쇄 System.out.println(tokenizer.nextToken()); System.out.println(tokenizer.nextToken()); System.out.println(tokenizer.nextToken()); System.out.println(tokenizer.nextToken()); //Getting the next token after reaching the end 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)
几乎所有访问器方法导致NoSuchElementException的类都包含各自的方法,以验证对象(集合,令牌生成器等)是否包含更多元素。
예를 들어-
Enumeration 클래스는 hasMoreElements() 메서드를 포함하고 있으며, 현재 객체가 현재 위치 이후에 더 많은 요소를 포함하고 있을 때는 이 메서드가 true를 반환합니다(그렇지 않으면 false를 반환합니다).
StringTokenizer 클래스는 hasMoreTokens()와 hasMoreElements() 메서드를 포함하고 있으며, 현재 객체가 현재 위치 이후에 더 많은 요소를 포함하고 있을 때는 이 메서드가 true를 반환합니다(그렇지 않으면 false를 반환합니다).
Iterator 클래스는 hasNext() 메서드를 포함하고 있으며, 현재 이터레이터가 현재 위치 근처에 더 많은 요소를 포함하고 있을 때는 이 메서드도 true를 반환합니다(그렇지 않으면 false를 반환합니다).
ListIterator 클래스는 hasPrevious() 메서드를 포함하고 있으며, 현재 이터레이터가 현재 위치 이전에 더 많은 요소를 포함하고 있을 때는 이 메서드도 true를 반환합니다(그렇지 않으면 false를 반환합니다).
while 루프에서 이 메서드를 사용하여 해당 객체가 더 많은 요소를 포함하는지 확인하고, 조건이 true 일 때만 인쇄합니다./요소에 접근합니다. 객체에 요소가 없을 때나 끝에 도달하면, 이는 접근자 메서드를 사용하여 요소에 접근하는 것을 방지할 수 있습니다.
Enumeration 클래스의 hasMoreElements() 메서드
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을 사용하여 요소를 가져오기 Enumeration<Integer> en = vec.elements(); while(en.hasMoreElements()) { System.out.println(en.nextElement()); } } }
출력 결과
1254 4587
StringTokenizer 클래스의 nextMoreTokens() 메서드-
import java.util.StringTokenizer; public class StringTokenizerExample{ public static void main(String args[]) { String str = "Hello how are you"; //StringTokenizer 클래스를 인스턴스화 StringTokenizer tokenizer = new StringTokenizer(str, " "); //모든 토큰을 인쇄 while(tokenizer.hasMoreTokens()) { System.out.println(tokenizer.nextToken()); } } }
출력 결과
Hello how are you
Iterator 클래스의 hasNext() 메서드-
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("apple"); list.add("망고"); list.add("oranges"); //ArrayList의 이터레이터 오브젝트를 가져오는 중 Iterator it = list.iterator(); while(it.hasNext()) { System.out.println(it.next()); } } }
출력 결과
apple 망고 오렌지
ListIterator 클래스의 hasPrevious() 메서드-
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("apple"); list.add("망고"); list.add("oranges"); //ArrayList의 이터레이터 오브젝트를 가져오는 중 ListIterator<String> it = list.listIterator(); while(it.hasNext()) { it.next(); } while(it.hasPrevious()) { System.out.println(it.previous()); } } }
출력 결과
오렌지 망고 apple