@BitNeBolt

# Почему на питоне работает, а на Java — нет?

Есть метод, который должен упорядочивать точки в новом массиве по увеличению расстояния от первой, выбранной точки.

Вот что на питоне:
Питон

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

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;

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 - нет.
• Вопрос задан
• 164 просмотра
Пригласить эксперта
Ответы на вопрос 1
@dmshar
Вы в чудеса верите? Если нет - то ответ тривиален - потому, что скрипте на Java ошибка. Вы же оба кода сами писали? И отлаживали при написании. Вот аккуратненько, пошагово и проходимся по обеим программулькам и ищем, где возникает отличие.
P.S. Кстати, а почему вы тестируете скрипты на разных входных данных? Причем абсолютно разных - даже по количеству элементов (координат???) в объекте. Для начала посмотрите, как они сработают на одинаковых. А уже потом принимайте решение.
И еще - а что неправильного в результатах, выданных Java-скриптом? По-моему, вполне адекватный результат сортировки по отношению к первому элементу.
Ответ написан
Ваш ответ на вопрос

### Войдите, чтобы написать ответ

Похожие вопросы
RYDLAB Екатеринбург
от 100 000 ₽
от 75 000 до 150 000 ₽
от 80 000 до 200 000 ₽
26 нояб. 2020, в 18:25
16969 руб./за проект
26 нояб. 2020, в 18:04
25000 руб./за проект
26 нояб. 2020, в 17:58
20000 руб./за проект