2011-08-16 127 views
2

我是java編程的初學者。我想開發一個程序,但是當我跑我的程序,它被張貼下方,它回來了與此錯誤:線程「main」中的異常java.lang.NullPointerException

Exception in thread "main" java.lang.NullPointerException at dist.main(dist.java:13)

import java.lang.Math; 
class Point { 
    int x; int y; 
} 

public class dist { 
    public static void main(String[] args) {  
     Point[] pt = new Point[3]; 
     pt[0].x = 40; pt[0].y = 40; 
     pt[1].x = 40; pt[1].y = 30; 
     pt[2].x = 26; pt[2].y = 30; 

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


     int ux = pt[0].x - pt[1].x; 
     System.out.println("ux:" + ux);  
    } 
} 
+1

請看看[Java代碼的慣例(http://www.oracle.com/technetwork/的java/codeconv-138413.html)。班級名稱以大寫字母開頭。 –

+0

你是否編譯過這段代碼,並聲明變量'n'。 –

+0

按照Nodebody告訴的說明操作。他很好地解釋爲初學者。 –

回答

3

按照你剛剛創建的3參考具有null陣列線通過默認值

point []pt=new point [3]; 

需要初始化每個參考使用new對象如下所示

for(int index = 0 ;index < pt.length ; index ++){ 
     pt[index] = new Point(); 
} 
+3

+1,雖然我不會使用'index <3',但是index'pt.length' – MByD

+0

請在您的文章中修改 –

0

創建對象數組不會在數組中創建對象。

您需要先訪問數組元素之前做到這一點:

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

那是因爲你創建一個能容納3個點的數組,但你不嘗試進行訪問之前創建自己的點。

你要做的:

point []pt=new point [3]; 
    pt[0] = new point(); 
    pt[0].x=40; pt[0].y=40; 
    pt[1] = new point(); 
    pt[1].x=40; pt[1].y=30; 
    pt[2] = new point(); 
    pt[2].x=26; pt[2].y=30; 

但是,當你學習,你應該習慣了Java代碼風格。課程以大寫字母開頭,使用正確的縮進,並儘快查看構造函數。例如,增加像

Point(int x, int y) { 
     this.x = x; 
     this.y = y; 
    } 

的構造你的Point類會給你初始化你的觀點一樣

Point[] points = new Point[] { new Point(40,40), new Point(40,30), new Point(26,30) }; 

而且這條線

int ux=pt[n].x-pt[1].x; 

甚至不應該與編譯的可能性不在任何地方宣佈。

玩得開心學習Java!

PS .:根據其他答案建議的創建循環中的點當然是更乾的方式來做到這一點。

0

pt [0] .x = 40; PT [0] .Y = 40; pt數組有空,並且您正嘗試獲取第0個位置記錄並分配它。這就是方式,它給空指針異常,如果你願意再由代碼下面給出線經過

point p=new point(); 
pt[0]=p 
pt[0].x=40; pt[0].y=40; 
相關問題