2011-08-11 4 views
1

配列リストがあります。値を追加しようとしていますが、例外が発生しています。 私は何度もこのコードを使用していますが、何がこのエラーを作成しているのか理解できません。以下は参考用のコードです。ArrayListに要素を追加中に例外が発生しました

私は、nullポインタ例外に入る方法を追加使用しています、 上記のすべての値がコンソールに印刷されたばかりされている行)

sid = new ArrayList<String>(); 
Enumeration e = Global.qtutlist.keys(); 
int qj=0; 
//iterate through Hashtable keys Enumeration 
while(e.hasMoreElements()) 
{ 
    System.out.println("sid is key and its value id"); 
    System.out.println(Integer.parseInt(e.nextElement().toString())); 
    try 
    { 
     sid.add(e.nextElement().toString()); 
     System.out.println("lenght is "+ sid.size()); 
    } 

    catch(Exception ex) 
    { 
     System.out.println("caught exception is"+ex.getMessage()); 

    } 
} 
+0

例外は何ですか? – highlycaffeinated

+0

どのラインで例外が発生するか教えてください。 – RoToRa

+0

@all以上のMaxはnullpointerexceptionだと言っています – doNotCheckMyBlog

答えて

5

あなたはループの中で二回nextElement()を呼び出し、一度

をチェックしています

while(e.hasMoreElements()) 
     { String item = e.nextElement().toString() 
      System.out.println("sid is key and its value id"); 
      System.out.println(Integer.parseInt(item)); 
      try{ 
      sid.add(item); 
      System.out.println("lenght is "+ sid.size()); 
      }catch(Exception ex){ 
       System.out.println("caught exception is"+ex.getMessage()); 
      } 
     } 

を次のように文字列のいずれかが解析可能ではない、その後NumberFormatExceptionを示した場合はそれを作ります

0

e.nextElement(intに)あなたはe.nextElement()を2回を使用している理由であり、あなたがnull

1

に対してtoString()操作を行っていることはnullです。これは動作しません。列挙型はIteratorデザインパターンを使用します。つまり、内部カウンタが次のオブジェクトに進む前に各要素に一度だけアクセスすることができます。 hasMoreElements()はカーソルを前進させず、nextElement()だけがカーソルを前進させます。

ストアローカル変数と再利用での結果:あなたは二度

e.nextElement() 

を呼んでいる

System.out.println("sid is key and its value id"); 
String str = e.nextElement().toString(); 
System.out.println(Integer.parseInt(str)); 
try{ 
    sid.add(str); 
    System.out.println("lenght is "+ sid.size()); 
}catch(Exception ex){ 
    System.out.println("caught exception is"+ex.getMessage()); 
} 
2

。あなたは一度だけアイテムの存在を確認したときに変数に格納し、代わりにその変数に

while(e.hasMoreElements()) { 
    Object o = e.nextElement(); 
    // ... 
} 
+0

さらに、 'Enumeration' genericはありませんか?それをパラメータ化すると、基本的な 'Object'リファレンスに各値を格納する必要はありません。 –

+0

@Tom:True。 –

+0

いいえ、 'Enumeration'が矛盾していないようではなく、' ArrayList'が適切にパラメータ化されているという事実です。 –

0

を操作するあなたは二回のnextElementを呼び出します。

0

e.hasMoreElements()を1回チェックし、ループ内でe.nextElement()を2回呼び出してください。 nextElement()を呼び出すたびに内部マーカーがインクリメントされるため、列挙する要素の数がすべてoddになるたびに、NPEが取得されます。

関連する問題