2016-01-15 3 views
2

Это может показаться глупым вопросом, но я новичок в Java. Я пытаюсь найти расстояние до двух точек. Описание метода: вычислить расстояние между этой точкой и другой точкой Когда я пытаюсь скомпилировать, я получаю сообщение об ошибке: НЕ МОЖЕТ НАЙТИ СИМВОЛ (в моем двойном 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); 
    } 

// ИНТЕРФЕЙС

public interface Point{ 
    double x(); 
    double y(); 
} 
+0

Я не получаю эту ошибку, когда я бросаю ваш код в eclipse, хотя я * делаю * получаю ошибки, которые 'other.x' и' other.y' не могут быть разрешены (что имеет смысл, так как 'other' является 'Point', а не' CartPoint'). – azurefrog

+0

Могу ли я конвертировать другие в CartPoint, а затем использовать его? –

+0

Конечно, см. Ответ Мурейника. – azurefrog

ответ

1

x и y являются членами CartPoint класса, а не Point класса, так что вы должны использовать его в качестве параметра класса:

public double distanceFrom(CartPoint other) { 

В качестве альтернативы , вы можете добавить getX() и getY() методы Point interf Туз и использовать их:

public double distanceFrom(Point other){ 
    double dx = (other.getX() - getX()); 
    double dy = (other.getY() - getY()); 
    return Math.sqrt(dx*dx + dy*dy); 
} 

EDIT:
Теперь, когда вы редактировали вопрос и показали, у вас есть x() и y() методы в интерфейсе, это то, что вы должны использовать:

public double distanceFrom(Point other){ 
    double dx = (other.x() - x()); 
    double dy = (other.y() - y()); 
    return Math.sqrt(dx*dx + dy*dy); 
} 
+0

Учитывая, что 'Point' является интерфейсом, поля там не могут быть указаны. Возможно, существуют методы 'getX' и' getY'? –

+0

Точка - это интерфейс, следует ли определить x & y в этом? –

+0

@ Дж. Даниелс, как предложил Джон, если это так, вы должны иметь геттеры в интерфейсе. См. Мой отредактированный ответ. – Mureinik

0

I думаю, что это будет работать и быть менее склонны к ошибкам округления:

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; 
} 

Имейте в виду, что это расстояние формула только appropriat e для двумерных декартовых систем координат. Расстояние на сферической системе координат очень различно.