2017-01-21 18 views
0

Я пишу метод в классе «CartesianPoint», который находит расстояние между двумя декартовыми точками. Всякий раз, когда я это называю, расстояние, которое распечатывается, всегда равно нулю, независимо от того, какие точки я использую. Я считаю, что новая точка, которую я создаю, чтобы найти расстояние, как-то переопределяет мои переменные экземпляра, но я не знаю, как правильно это кодировать.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 

Чтобы уточнить, Cartesian и Polar должны печатать координаты 'p', а не 'a', как они делают прямо сейчас. Кажется, что каждая новая точка, созданная, переопределяет координаты последней точки.

Любая помощь на это очень ценится!

+0

Удалить ключевое слово static из x и y –

ответ

2

Удалите static ключевое слово, прежде чем объявлять свойства CartesianPoint в:

private double x; 
private double y; 

Тогда вы будете уверены, что вы обращаетесь правильные свойства для каждого экземпляра класса (инкапсуляции свойств).

Кроме того, формула вы используете, чтобы получить расстояние между двумя точками является неправильным, он должен был

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

Поскольку формула SQRT ((х б - х в) + (у б - у )), правильный метод был бы:

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

Подсказка: проверить формулу для вычисления расстояния (например, см here) и сравнить его с тем, что вы написали здесь:

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

Вы видите разницу?

Подсказка №2: Минус ???


Когда вы пишете код, который не работает правильно, он платит:

  • Прочитайте то, что вы написали тщательно
  • Проверьте требования.
  • Проверьте свои знания домена: в этом случае «по математике»