如何在这个例子中返回一个Point

时间:2013-10-09 02:09:35

标签: java inheritance methods nullpointerexception

我试图从扩展形状类的circle.java类返回一个Point。我一直在获得空指针异常。我需要使用继承的getPoints()来重新计算中心点;方法但是inhereted方法返回一个数组,并且要从circle返回的值不是数组。如何在不制作单独返回方法的情况下返回中心点。 我的Shape类如下

import java.awt.Point;

public abstract class Shape {
private String  name;
private Point[] points;
protected Shape(){};
protected Shape(String aName) {
    name = aName;
}

public final String getName() {
    // TODO Implement method
    return name;
}

protected final void setPoints(Point[] thePoints) {
    points = thePoints;
}

public final Point[] getPoints() {
    // TODO Implement method
    return points;
}

public abstract double getPerimeter();

public static double getDistance(Point one, Point two) {
    double x = one.getX();
    double y = one.getY();
    double x2 = two.getX();
    double y2 = two.getY();
    double x3 = x - x2;
    double y3 = y - y2;
    double ypow = Math.pow(y3, 2);
    double xpow = Math.pow(x3, 2);
    double added = xpow + ypow;
    double distance = Math.sqrt(added);
    return distance;
}
}

我的圈子类是以下

import java.awt.Point;

public class Circle extends Shape{

private double radius;

public Circle(Point center, int aradius) {
super("Circle");

radius = aradius;
if(radius < 0){
    radius = 0;
}
else{
radius = aradius;
}

}

@Override
public double getPerimeter() {
double perim = 2 * Math.PI * radius;
return perim;
}
  public double getRadius(){
  return radius;
}

}

2 个答案:

答案 0 :(得分:1)

我能想到的最简单的解决方案就是使用setPoints类中的Shape方法......

public Circle(Point center, int aradius) {
    super("Circle");
    //...
    setPoints(new Point[]{center});
}

答案 1 :(得分:0)

您获得NullPointerException的原因是因为您永远不会setPoints Shape

我不确定points应该包含什么,但对我来说唯一有意义的是形状内的所有点。哪个IMO有点难以确定圆形等形状并确定中心点似乎更棘手(虽然我猜一个圆圈它几乎是阵列的中间点,取决于顺序?)。

(第二个想法points也可以包含子类决定它应该包含的内容,例如圆的1个中心点和矩形的4个点。)

无论如何,在使用points之前,您必须填写Shape数组setPoints(通过调用getPoints)一些数据。