2012-12-04 44 views
2
public class example 
{ 
    static class point 
    { 
     int x; 
     int y; 
    } 

    static void main(String args[]) 
    { 
     point p = new point(); 
     point[] p1 = new point[5]; 
     point[][] p2 = new point[5][5]; 

     p.x = 5; //No problem 
     p[0].x = 5; //When I run the program, it gives error:java.lang.NullPointerException 
     p[0][0].x = 5; //When I run the program, it gives error:java.lang.NullPointerException 
    } 

如何初始化p []。x和p [] []。x?如何初始化一個二維數組?

+3

請始終使用駝峯你的類名。 – schippi

+0

數組元素初始化爲給定元素類型的默認值。對象的默認值是什麼?爲什麼我的這會導致一個** NULL ** - PointerException? – 2012-12-04 16:58:43

+0

-1,因爲1,2和42維數組之間沒有差別。作爲開發人員,隔離[真正]問題至關重要。 – 2012-12-04 16:59:48

回答

5

您需要手動初始化整個數組和各級,如果多層次的:

point[] p1 = new point[5]; 
// Now the whole array contains only null elements 

for (int i = 0; i < 5; i++) 
    p1[i] = new point(); 

p1[0].x = 1; // Will be okay 
+0

2D數組我必須手動初始化整個數組? –

+1

是的,你必須。爲此,使用double for循環。維數沒有真正的差別,每個元素都存在,但所有元素都在創建時保留空引用。 – Matzi

0
point p = new point(); 

它是point對象。對象是一維數組。它擁有point對象引用。您應該創建一個point對象,並保持到像數組 -

for (int i = 0; i < 5; i++) 
    p1[i] = new point(); 

p1[0].x = 1; 

而對於一個二維數組 -

point[][] p2 = new point[5][5]; 

for (int i = 0; i < 5; i++){ 
    for (int j = 0; j < 5; j++) 
     p1[i][j] = new point(); 
} 
p[0][0].x = 5; 
0

當你構建對象的數組,數組本身的構造,但個別元素被初始化爲null。所以,假設Point()是你想要的構造函數,

Point[] p1 = new Point[5]; 
for (int i = 0; i < p1.length; ++i) { 
    p1[i] = new Point(); 
} 
2

想想這樣;當你做new point[5](你應該遵循編碼標準並且用大寫首字母順序命名你的類),你會得到一個的數組,每個元素都是(在這種情況下爲null)的默認值。該陣列被初始化,但如果要在陣列的各個元素被初始化,則必須做到這一點爲好,或者在這樣的初始行:

point[] p1 = new point[] { new point(), new point() }; 

(以上方法將創建與陣列每個元素已經初始化,將容納那些元件的最小尺寸的 - 在這種情況下2.)

,或者通過在陣列循環和手動添加點:

point[] p1 = new point[5]; 
for (int i = 0; i < p1.length; i++) { 
    point[i] = new point(); 
} 

這兩個概念可以擴展到多維數組:

point[] p2 = new point[][] { 
    new point[] { new point(), new point() } 
    new point[] { new point(), new point() } 
}; 

或者

point[] p2 = new point[5][5]; 
for (int i = 0; i < p2.length; i++) { 
    for (int j = 0; j < p2[i].length; j++) { 
     p2[i][j] = new point(); 
    } 
}