Rectangle类

时间:2015-09-30 23:49:24

标签: java nullpointerexception getter-setter

我正在编写一个程序,用户可以通过给出左上角和右下角坐标来创建矩形。反过来,我的程序应该使用用户输入的点自动设置右上角和左下角坐标。

Ex:用户添加一个矩形,左上角为(5,25),右下角为(20,10)。所以右上角是(20,25),左下角是(5,10)。

这就是我在Rectangle类中编写的内容:

Point upperLeft;
Point lowerRight;
Point upperRight;
Point lowerLeft;
public double area;
public double perim;

public Rectangle (Point upperLeft, Point lowerRight){
    this.upperLeft = upperLeft;
    this.lowerRight = lowerRight;
}

public Point getUpperLeft() {
    Point p = upperLeft;
    return p;
}

public void setUpperLeft(Point p) {
    this.upperLeft = p;
}

public Point getLowerRight() {
    Point p2 = lowerRight;
    return p2;

}

public void setLowerRight(Point p2) {
    this.lowerRight = p2;
}

public Point getUpperRight(){
    upperRight.setX(lowerRight.getX()); 
    upperRight.setY(upperLeft.getY());
    return upperRight;
}

public Point getLowerLeft(){
    lowerLeft.setX(upperLeft.getX());
    lowerLeft.setY(lowerRight.getY());
    return lowerLeft;
}

在我的主类中,我创建了一个名为r的Rectangle,并执行了一个r.getLowerRight()的println。工作正常,按预期返回(20,10)。

但是,如果我尝试打印用户未输入的其中一个点,例如upperRight,我会得到getUpperRight第一行的空指针异常,即:

upperRight.setX(lowerRight.getX()); 

如果我自己打印lowerRight.getX()的值,它就可以了。但出于某种原因,当我尝试将upperRight点的X设置为与lowerRight点的X相同时,它就不起作用了。这是Point类:

private double x;
private double y;
private double area;
private double perim;


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


public double getX() {
    return x;
}

public void setX(double x) {
    this.x = x;
}

public double getY() {
    return y;
}

public void setY(double y) {
    this.y = y;
}

public String id() {        
    shapeID++;
    String id = String.valueOf(shapeID);
    return id;
}

public double area() {
    area = 0;
    return area;
}

public double perimeter() {
    perim = 0;
    return perim;
}

public void hit(Point p) {

}

public String toString(){
    return "(" + x + "," + y + ")";
}

public static double distance(Point p1, Point p2){
    double distance = Math.sqrt((p1.x - p2.x)*(p1.x - p2.x) + (p1.y - p2.y)*(p1.y - p2.y));
    return distance;
}


}

另一个注意事项:即使我用upperRight.setX(20.0)替换upperRight.setX(lowerRight.getX()),getUpperRight println仍然会给出一个空指针异常,这让我觉得问题出在upperRight上。 setX语句的一部分。

编辑:我真的不知道这是什么重复“什么是空指针异常?”这是一个更普遍的问题。我知道它是什么,但我不知道它是如何应用的。

0 个答案:

没有答案