首页 > 解决方案 > 如何在java中计算整个链接列表的点的总距离?

问题描述

我有一个这样的节点列表: (0,0) -> (0,3) -> (4,3) -> null 我正在尝试编写一种方法来计算节点列表的距离,但是输出似乎不对。

这是我的程序。我有 2 个类,航点在链表中创建一个新点,并且 TourElement 包含点。

//路点.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。我不知道我做错了什么,请帮助我。非常感谢你!!!!

标签: javalinked-listnodesdistance

解决方案


推荐阅读