我正在类"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 - ya)2),正确的方法是:
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:减去???
当您编写一些无法正常工作的代码时,需要:
- 仔细阅读你写的内容
- 检查要求。
- 检查您的领域知识:在本例中为"数学"