我正在编写一个程序,用户可以通过给出左上角和右下角坐标来创建矩形。反过来,我的程序应该使用用户输入的点自动设置右上角和左下角坐标。
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语句的一部分。
编辑:我真的不知道这是什么重复“什么是空指针异常?”这是一个更普遍的问题。我知道它是什么,但我不知道它是如何应用的。