JavaマスターJavaプログラムサンプル集例外のサンプル → NoSuchElementException対策

NoSuchElementException対策

要素を順番に取り出して処理するときに発生する NoSuchMethodException例外について説明します。

下記のソースでは、まずArrayListのオブジェクトを作成し、 3つの文字列を格納しています。次に、Iteratorのnextメソッドによって 各要素を順番に処理しています。

samples/exception/NoSuchElementExceptionTest.java - Eclipse SDK
package samples.exception;

import java.util.ArrayList;
import java.util.Iterator;

public class NoSuchElementExceptionTest {
  public static void main(String[] args) {
    try {
      ArrayList list = new ArrayList();
      list.add("red");
      list.add("green");
      list.add("blue");
      
      Iterator it = list.iterator();
      System.out.println(it.next());
      System.out.println(it.next());
      System.out.println(it.next());
      System.out.println(it.next());
      
    catch (Exception e) {
      e.printStackTrace();
    }
  }
}

ここでは3つしか要素を入れていないのにもかかわらず、 nextメソッドを4回実行していますので、4回目のところで NoSuchElementException例外が創出されます。

コマンド プロンプト

C:\JavaMaster\bin>java -cp . samples.exception.NoSuchElementExceptionTest 
red
green
blue
java.util.NoSuchElementException
    at java.util.AbstractList$Itr.next(Unknown Source)
    at samples.exception.NoSuchElementExceptionTest.main(NoSuchElementExceptionTest.java:18)

通常は、hasNext を使って while (it.hasHext()) { it.next() } というように、次の要素があるかどうかを確認してから nextメソッドを呼び出します。