2011-08-16 146 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; 
相关问题