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