这似乎是一个愚蠢的问题,但我是Java的新手。我想找到两点的距离。 方法摘要:计算此Point与另一个Point之间的距离当我尝试编译时,我收到错误:无法找到符号(在我的双dx和双dy中)。如果有人可以提供帮助,我们将不胜感激。以下是我的代码。
public class CartPoint implements Point{
private Double x;
private Double y;
public CartPoint (double x, double y){
this.x = x;
this.y = y;
}
public double x(){
return x;
}
public double y(){
return y;
}
public double distanceFrom(Point other){
double dx = (other.x - this.x);
double dy = (other.y - this.y);
return Math.sqrt(dx*dx + dy*dy);
}
// INTERFACE
public interface Point{
double x();
double y();
}
答案 0 :(得分:1)
x
和y
是CartPoint
类的成员,而不是Point
类,因此您应该将其用作参数类:
public double distanceFrom(CartPoint other) {
或者,您可以在getX()
界面添加getY()
和Point
方法并使用它们:
public double distanceFrom(Point other){
double dx = (other.getX() - getX());
double dy = (other.getY() - getY());
return Math.sqrt(dx*dx + dy*dy);
}
编辑:
既然您已经对问题进行了编辑,并且在界面中显示了x()
和y()
方法,那就是您应该使用的方法:
public double distanceFrom(Point other){
double dx = (other.x() - x());
double dy = (other.y() - y());
return Math.sqrt(dx*dx + dy*dy);
}
答案 1 :(得分:0)
我认为这会有效并且不太容易出现舍入错误:
public double distanceFrom(Point other){
double distance = 0.0;
double dx = Math.abs(other.x() - this.x());
double dy = Math.abs(other.y() - this.y());
if (dx > dy) {
double ratio = dy/dx;
distance = dx*Math.sqrt(1.0+ratio*ratio);
} else {
double ratio = dx/dy;
distance = dy*Math.sqrt(1.+ratio*ratio);
}
return distance;
}
请注意,此距离公式仅适用于2D笛卡尔坐标系。球面坐标系上的距离非常不同。