java.util.nosuchelementException
java.util.NoSuchElementException
是一个runtimeexception或者说出一个取消选中的一种,因此它不需要在构造函数或者方法的投掷块中声明。
java.util.NoSuchElementException
当我们尝试访问堆中的底层数据结构时,通常会抛出,并且由不同的类抛出,它具有获取下一个元素或者下一个令牌的方法,如迭代器::下一个(),枚举:: nextElement(),stringTokenizer :: nextToken()。
示例当我们在没有实现条件的情况下迭代HashMap时,如果有任何元素或者不是任何元素,则java引发或者抛出此异常,现在这是我们在迭代器上调用下一个()之前使用hasnext()的原因。
java.util.nosuchelementException可以有多种方案。
让我们在示例的帮助下看下不同情况
场景1:在枚举的情况下
在枚举中,如果我们调用方法nextElederment(),并且没有枚举中存在的元素,则提出了此异常,请参阅下面的代码。
语法 :
package org.igi.theitroad; import java.util.*; class Main { public static void main(String args[]) { Hashtable hmap = new Hashtable(); Enumeration enumer = hmap.elements(); enumer.nextElement(); //java.util.NoSuchElementExcepiton //because the enumeration is empty } }
输出:
线程"main"java.util.nosuchelementException in java.util.collections $equentenumeration.nextElement.noxtElement(Ava:4270)在Main.main(main.java:7)
解决方案
通过使用调用方法检查它是否真正具有元素的条件 hasMoreElements()
。
代码:
package org.igi.theitroad; import java.util.*; class Main { public static void main(String args[]) { Hashtable hmap = new Hashtable(); Enumeration enumer = hmap.elements(); if (enumer.hasMoreElements()) { //java.util.NoSuchElementExcepiton handled by checking enumer.nextElement(); } } }
上面的程序将完全罚款,没有例外。
场景2:在迭代器的情况下
在迭代器中,如果我们调用Next()调用方法,并且迭代器中没有包含的元素,则提出此异常,请参阅下面的代码。
package org.igi.theitroad; import java.util.*; class Main { public static void main(String args[]) { HashMap hMap = new HashMap(); Iterator itr = hMap.keySet().iterator(); itr.next(); //java.util.NoSuchElementException here because iterator is //empty } }
输出:
在java.util.hashmap $hashiterator.noxterator.noxtnode(hashmap.java:1447)java.util.hashmap $keyiterator.next(hashmap.java:1469)的java.util.hashmapeption .nosuchelementexception main.java:6)
解决方案
通过通过调用方法hasnext()来实现一个检查是否存在下一个元素的条件。
代码:
package org.igi.theitroad; import java.util.*; class Main { public static void main(String args[]) { HashMap hMap = new HashMap(); Iterator itr = hMap.keySet().iterator(); if (itr.hasNext()) itr.next(); //java.util.NoSuchElementExcepiton handled } }
现在,这在不抛出给定的异常的情况下运行。
场景3:在stringTokenizer的情况下
在stringTokenizer中,如果我们调用方法NextElederment()或者nextToken(),并且没有元素或者令牌存在,则提出此异常,请参阅下面的代码。
package org.igi.theitroad; import java.util.StringTokenizer; class Main { public static void main(String args[]) { StringTokenizer token = new StringTokenizer("", ":"); System.out.println(token.nextToken()); } }
输出:
Exception in thread “main" java.util.NoSuchElementException at java.util.HashMap$HashIterator.nextNode(HashMap.java:1447) at java.util.HashMap$KeyIterator.next(HashMap.java:1469) at Main.main(Main.java:6)
解决方案
通过使用stringTokenizer hasMoreTokens() or hashMoreElements()
在过程之前调用NextToken()或者NextElement()。
代码:
package org.igi.theitroad; import java.util.StringTokenizer; class Main { public static void main(String args[]) { StringTokenizer token = new StringTokenizer("", ":"); while (token.hasMoreTokens()) //Exception Handled System.out.println(token.nextToken()); } }