1

我知道爲什麼會有錯誤,並且我已經修復了它..我需要有人正確解釋它..它編譯得很好,但在runTime它在行appString [i] [j] = s [j]處顯示空指針異常; ..有人知道原因......?NullPointerException當分配給多維數組中的arr [x] [y]

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];' - 每個元素都是空的一樣。 –

+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存儲矢量的字符串數組.. ..任何方式謝謝你.. – ngesh

+0

@Jon,我不會建議使用Vector,我認爲這是使用的。否則,我傾向於儘可能地使答案儘可能不同,重複你的答案是沒有意義的。 ;) –

0

下面的語句將創建一個應用程序的大小String數組1維

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

但對於2維數組中的所有值將被填充空。

當在運行時處理appString[i][j]時,將查找第一個appString[i]存儲桶,並在該存儲器中查找該應用程序字符串[i] [j]。

這裏appString[i]本身是null因此你有NullPointerException