线程“main”java.lang.NullPointerException中的异常

时间:2011-08-16 07:08:36

标签: java nullpointerexception

我是java编程的初学者。我正在尝试开发一个程序,但是当我运行下面发布的程序时,它又出现了这个错误:

  

线程“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);     
    }
} 

4 个答案:

答案 0 :(得分:3)

通过以下行,您只需创建一个3参考数组,默认情况下具有null

point []pt=new point [3];

您需要使用new初始化对象的每个引用,如下所示

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

答案 1 :(得分: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:按照其他答案的建议在循环中创建点当然是更干的方法。

答案 2 :(得分:0)

创建对象数组不会在数组中创建对象。

在访问数组元素之前,您需要先执行此操作:

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

答案 3 :(得分:0)

PT [0] = .X 40; PT [0] .Y = 40; pt数组为null,你试图得到第0个位置记录并分配它。这是它给出空指针异常的方式,如果你希望通过下面给出的代码行

point p=new point();
pt[0]=p
pt[0].x=40; pt[0].y=40;