Java:两点之间的距离始终返回零



我正在类"CartesianPoint"中编写一个方法,用于查找两个笛卡尔点之间的距离。每当我调用它时,无论我使用哪个点,打印出来的距离始终为零。我相信我为查找距离而创建的新点以某种方式覆盖了我的实例变量,但我不知道如何正确编码。

这是笛卡尔点类:

public class CartesianPoint implements Point {
    private static double x;
    private static double y;
    public CartesianPoint(double xCoord, double yCoord){
      x = xCoord;
      y = yCoord;
    }
    public double xCoordinate(){
      return x;
    }
    public double yCoordinate(){
      return y;
    }
    public double radius(){
      double radius = Math.sqrt(Math.pow(xCoordinate(), 2)+Math.pow(yCoordinate(), 2));
      return radius;
    }
    public double angle(){
      double angle = Math.acos(xCoordinate() / radius());
      return angle;
    }
    public double distanceFrom(Point other){
      //System.out.println("x coordinate of this: " + xCoordinate());
      //System.out.println("x coordinate of other: " + other.xCoordinate());
      double xDistance = x - other.xCoordinate();
      double yDistance = y - other.yCoordinate();
      double distance = Math.sqrt(Math.pow(xDistance, 2) -     Math.pow(yDistance, 2));
      return distance;
    }
//not currently being used
    public Point rotate90(){
      Point rotatedPoint = new CartesianPoint(0, 0);
      return rotatedPoint;
    }
}

这是我的测试器类中的方法调用:

public class tester{
  public static void main(String[] args){
  Point p = new CartesianPoint(3, 4);
  Point a = new CartesianPoint(6, 7);
  System.out.println("Cartesian: (" + p.xCoordinate() + ", " + p.yCoordinate() + ")");
  System.out.println("Polar: (" + p.radius() + ", " + p.angle() + ")");
  System.out.println("Distance: " + p.distanceFrom(a));
  }
}

这是我得到的输出:

Cartesian: (6.0, 7.0)
Polar: (9.219544457292887, 0.8621700546672264)
Distance: 0.0

澄清一下,笛卡尔和极地应该打印出"p"的坐标,而不是像现在所做的那样打印出"a"。似乎创建的每个新点都会覆盖最后一个点的坐标。

非常感谢对此

的任何帮助!

在声明 CartesianPoint 的属性之前删除 static 关键字:

private double x;
private double y;

然后,您将确保访问类的每个实例的正确属性(封装属性)。

此外,您用于获取两点之间距离的公式不正确,它应该是

double distance = Math.sqrt(Math.pow(xDistance, 2) + Math.pow(yDistance, 2));

由于公式为 sqrt((x b - x a)2 + (yb - ya2),正确的方法是:

public double distanceFrom(Point other){
  //System.out.println("x coordinate of this: " + xCoordinate());
  //System.out.println("x coordinate of other: " + other.xCoordinate());
  double xDistance = x - other.xCoordinate();
  double yDistance = y - other.yCoordinate();
  double distance = Math.sqrt(Math.pow(xDistance, 2) + Math.pow(yDistance, 2));
  return distance;
}

提示:检查计算距离的公式(例如,请参阅此处)并将其与您在此处编写的内容进行比较:

 Math.sqrt(Math.pow(xDistance, 2) - Math.pow(yDistance, 2));

你看出区别了吗?

提示#2:减去???


当您编写一些无法正常工作的代码时,需要:

  • 仔细阅读你写的内容
  • 检查要求。
  • 检查您的领域知识:在本例中为"数学"

相关内容

  • 没有找到相关文章

最新更新