1

왜 나는 오류가 있으며 그것을 고쳤다 고 알고 있습니다. 나는 그것을 올바르게 설명 할 누군가가 필요합니다. 행에서 null 포인터 예외를 보여줍니다. appString [i] [j] = s [j]; .. 누군가 이유를 알고 ...?다차원 배열의 arr [x] [y]에 할당 할 때 NullPointerException이 발생했습니다.

appString = new String[app.size()][]; 
for(int i = 0; i<app.size();i++) 
{ 
    Vector appVec = (Vector) app.get(i); 
    String[] s = new String[appVec.size()]; 
    appVec.toArray(s); 
    for(int j = 0 ; j<s.length;j++) 
    { 
     //String s1 = s[j]; 
     appString[i][j] = s[j]; 
    } 
} 

답변

7

당신은 최상위 배열을 만들었습니다,하지만 각각의 요소는 null입니다. 다음과 같은 것이 필요합니다.

appString[i] = new String[s.length]; 

아니면 다시 어쨌든 배열을 필요로하지 않는다는 것을 주어, 당신은 루프 필요가 없습니다

appString = new String[app.size()][]; 
for(int i = 0; i<app.size();i++) 
{ 
    Vector appVec = (Vector) app.get(i); 
    String[] s = new String[appVec.size()]; 
    appVec.toArray(s); 
    appString[i] = s; 
} 
+0

@devA : 컴파일 타임에 오류가 없으므로 컴파일 타임 오류가 표시되지 않습니다. 특정 크기의 요소 유형'String [] '을 가진 배열을 만들었습니다. 당신은 단지 그 요소들을 초기화하지 않았습니다. 'Foo [] x = new Foo [10];와 똑같습니다 - 각 요소는 null입니다. –

+0

@devA : 오타가 있습니다. 지금 수정되었습니다 - 편집 된 코드로 시도하십시오. –

1

을 @ 마찬가지로 존의 솔루션하지만 조금 짧은합니다.

Vector<Vector<String>> app = ... 
List<String[]> arrays = new ArrayList<String[]>(); 
for(Vector<String> vector: app) 
    arrays.add(vector.toArray(new String[vector.size()])); 
appString = arrays.toArray(new String[arrays.size()][]); 
+1

가능한 한 OP의 코드를 변경하려고했습니다. 그리고 '벡터'? 정말? :) –

+1

내가 이미 했어. 내가 실제로하려고했던 것은 inturn이 벡터를 저장하는 Vector를 반환하는 메소드에서 문자열 배열을 얻는 것이었다. 어쨌든 고맙다. – ngesh

+0

@ 존, 나는 제안하지 않을 것이다. Vector를 사용하여, 나는 이것이 사용 된 것으로 가정했다. 그렇지 않으면, 나는 가능한 한 다른 답변을 만드는 경향이 있습니다. 대답을 반복 할 필요가 없습니다. ;) –

0

다음 문은 1 차원

appString = new String[app.size()][]; 

에 대한 응용 프로그램의 크기의 문자열 배열을 만들 것입니다하지만 2 차원 배열의 모든 값은 널 (null)으로 채워집니다.

런타임시 appString[i][j]이 처리되면 처음에는 appString[i] 버킷이 검색되고 appString [i] [j]가 검색됩니다.

여기 appString[i]null이므로 NullPointerException이 있습니다.

관련 문제