Есть метод, который должен упорядочивать точки в новом массиве по увеличению расстояния от первой, выбранной точки.
Вот что на питоне:
Питон
points = []
sorted_list = []
INF = 999
def findClosestPointIndex(self, point):
best_distance = self.INF
best_index = -1
for i in range(len(self.points)):
current_point = self.points[i]
if (not current_point.visited):
distance = current_point.distanceTo(point)
if (distance < best_distance):
best_distance = distance
best_index = i
print("Closest to " + point.buildStr() + " is: " + self.points[best_index].buildStr())
if (best_index != -1):
self.points[best_index].visited = True
self.sorted_list.append(self.points[best_index])
self.findClosestPointIndex(self.points[best_index])
return best_index
def main(self):
points_count = int(input("Enter points count: "))
for i in range(points_count):
self.points.append(Point(random.randint(0, 9), random.randint(0, 9)))
start_point = self.points[0]
start_point.visited = True
self.sorted_list.append(start_point)
self.findClosestPointIndex(start_point)
print("Source list: ")
for point in self.points:
print(point.buildStr())
print("Sorted list:")
for point in self.sorted_list:
print(point.buildStr())
print("Finished.")
Вот что на Java:
Java
private void findBestAndAdd(Vector3 point)
{
double bestDistance = Double.MAX_VALUE;
int bestIndex = -1;
for (int i = 0; i < points.size(); i++)
{
Vector3 currentPoint = points.get(i);
if (! currentPoint.visited)
{
double distance = Vector3.distanceBetween(point, currentPoint);
if (distance < bestDistance)
{
bestDistance = distance;
bestIndex = i;
}
}
}
if (bestIndex != -1)
{
Vector3 bestPoint = points.get(bestIndex);
bestPoint.visited = true;
sortedPoints.add(bestPoint);
findBestAndAdd(bestPoint);
}
}
public void sortPoints()
{
System.out.println("Array before sort:");
for (Vector3 point : points)
System.out.println(point.toString());
Vector3 startPoint = points.get(0);
startPoint.visited = true;
sortedPoints.add(startPoint);
findBestAndAdd(startPoint);
this.points = sortedPoints;
System.out.println("Array after sort:");
for (Vector3 point : points)
System.out.println(point.toString());
}
Вот результаты при входных данных:
Python
Входные:
Source list:
8;9
2;0
6;0
9;8
Выходные:
Sorted list:
8;9
9;8
6;0
2;0
Java
Входные:
Array before sort:
3.2060296130482615 ; 15.364776819179262 ; 0.0
2.9060809054810197 ; 14.744574242841 ; 0.0
2.9060809054810197 ; 14.744574242841 ; 30.0
3.2060296130482615 ; 15.364776819179262 ; 30.0
Выходные:
Array after sort:
3.2060296130482615 ; 15.364776819179262 ; 0.0
3.2060296130482615 ; 15.364776819179262 ; 30.0
2.9060809054810197 ; 14.744574242841 ; 30.0
Почему на питоне оно правильно (как мне надо) работает, а на Java - нет.