NoSuchElementException的原因是什么,如何在Java中修复它?
NoSuchElementException的原因是什么,如何在Java中修复它?
例外是程序执行期间发生的问题(运行时错误)。发生异常时,程序会突然终止,并且生成异常的行之后的代码将永远不会执行。每个异常由其各自的类表示。
NosuchElementException的原因
这是运行时异常,即它在执行时发生。
如果您尝试从空对象获取元素,或者使用Enumeration,Iterator或tokenizer的访问器方法(例如next()或nextElement())访问集合,数组或其他对象的内容,则尝试在到达对象(集合,数组或其他对象)的末尾后获取下一个元素,将生成NoSuchElementException。
例如,
如果在空的枚举对象上调用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";
//Instantiating the StringTokenizer class
StringTokenizer tokenizer = new StringTokenizer(str, " ");
//Printing all the tokens
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();
}
}
运行时错误
Hellohow
are
you
Exception in thread "main" java.util.NoSuchElementException
at java.util.StringTokenizer.nextToken(Unknown Source)
at MyPackage.StringTokenizerExample.main(StringTokenizerExample.java:16)
处理/修复NosuchElementException
几乎所有其访问器方法导致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[]) {
//instantiating a Vector
Vector<Integer> vec = new Vector<Integer>( );
//Populating the vector
vec.add(1254);
vec.add(4587);
//Retrieving the elements using the Enumeration
Enumeration<Integer> en = vec.elements();
while(en.hasMoreElements()) {
System.out.println(en.nextElement());
}
}
}
输出结果
12544587
StringTokenizer类的nextMoreTokens()方法-
import java.util.StringTokenizer;public class StringTokenizerExample{
public static void main(String args[]) {
String str = "Hello how are you";
//Instantiating the StringTokenizer class
StringTokenizer tokenizer = new StringTokenizer(str, " ");
//Printing all the tokens
while(tokenizer.hasMoreTokens()) {
System.out.println(tokenizer.nextToken());
}
}
}
输出结果
Hellohow
are
you
Iterator类的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());
}
}
}
输出结果
applesmangoes
oranges
ListIterator类的hasPrevious()方法-
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());
}
}
}
输出结果
orangesmangoes
apples
以上是 NoSuchElementException的原因是什么,如何在Java中修复它? 的全部内容, 来源链接: utcz.com/z/331567.html