Как рассчитать общее расстояние точек всего списка ссылок в Java? - PullRequest
0 голосов
/ 29 мая 2019

У меня есть список узлов, подобный этому: (0,0) -> (0,3) -> (4,3) -> ноль Я пытаюсь написать метод для расчета расстояния между списками узлов, но вывод не выглядит правильным.

Вот моя программа. У меня есть 2 класса, путевая точка для создания новой точки в связанном списке, и TourElement содержит точки.

// WayPoint.java:

public class Waypoint {
    int x  ;
    int y  ;
    public int getX()
    {
        return this.x;
    }
    public int getY()
    {
        return this.y;
    }
    public void setXY(int x, int y)
    {
        this.x = x;
        this.y = y;
    }
     double calcDistance(Waypoint other) {
            //(0,0),(0,4)
     double X = other.x - getX();//3
     double Y = other.y - getY();//3
     return Math.sqrt(X*X + Y*Y);
    }

// TourElement.java

public class TourElement {
 private Waypoint points;
 private TourElement next;
  public void setWaypoint( Waypoint points)
 {
   this.points = points; 
 }
  public void setTourElement(TourElement next)
  {
      this.next = next;
  }
 Waypoint getWaypoint()
 {
     return this.points;
 }




TourElement getNext()
 {
     return this.next;
 }

// вывод этого метода не выглядит правильным

double calcDistance()
{
  double distance = 0;
  TourElement current = this;

  while (current.next != null)
  {
 distance = distance  + current.points.calcDistance(this.points);
      current = current.next;
  }
  if(current.next == null)
  {
      distance = distance + current.points.calcDistance(points);
  }
  return distance;
}

// контрольный пример:

private TourElement createElementList(int[][] waypoints){
        assert waypoints.length > 0;
        TourElement elem = new TourElement();
        int lastIndex = waypoints.length-1;
        Waypoint wp = createWaypoint(waypoints[lastIndex][0], waypoints[lastIndex][1]);
        elem.setWaypoint(wp);
        for (int i = lastIndex-1; i >= 0 ; i--) {
            wp = createWaypoint(waypoints[i][0], waypoints[i][1]);
            elem = elem.addStart(wp);
        }
        return elem;
    }

  public void testCalcDistance_ThreeElementsOrthogonal() {
        TourElement elem = createElementList(new int[][] {{0, 0}, {0, 3}, {4, 3}});
        assertEquals(7, elem.calcDistance(), EPSILON);
    }

Когда я проверяю свой метод, в цикле while расстояние = (0,0) и (0,3), это правильно. но затем, когда я пытаюсь рассчитать расстояние 2 точки (0,3) и (4,3), вывод неправильный, потому что программа вычисляет расстояние (0,0) и (4,3) вместо (0 , 3) и (4,3). так что выход - 8. Я не знаю, что я делаю неправильно, пожалуйста, помогите мне. заранее большое спасибо !!!!

...