2011-08-11 10 views
1

배열 목록이 있습니다. 값을 추가하려고하는데 예외로 실행됩니다. 이 코드를 여러 번 사용했는데이 오류를 만드는 것이 무엇인지 파악할 수 없습니다. 아래 코드는 참조 용입니다.ArrayList에 요소를 추가하는 동안 예외가 발생했습니다.

내가 널 포인터 예외로 얻을 방법을 추가 사용하고 라인을 위의 모든 값은

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()를 호출 한 번

을 확인하고 있습니다) 콘솔에 인쇄 얻고있다 그 다음 문자열 중 하나 NumberFormatException를 표시하는 경우

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()); 
      } 
     } 

을 다음 구문 분석 아니므로

는 그것을 만들 int

0

e.nextElement에() 이유이고 두 번 널

1

당신은 e.nextElement를 사용하는() 상에 toString() 작업을하고 그 null입니다. 이것은 작동하지 않습니다. 열거 형은 반복기 디자인 패턴을 사용합니다. 즉, 내부 카운터가 다음 객체로 넘어 가기 전에 각 요소에 한 번만 액세스 할 수 있습니다. 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()을 한 번 확인하고 루프에서 e.nextElement()을 두 번 호출하십시오. nextElement()을 호출 할 때마다 내부 마커가 증가하기 때문에 열거 형의 요소 수가 홀수가 일 때마다 NPE가 표시됩니다.

관련 문제