У меня есть класс Rectangle, который в части кода находит область класса прямоугольника, используя:
public double calculateArea() {return this.width * this.height;}
Мне нужно создать второй класс с именем RectangleComparator и реализовать интерфейс компаратора для сравнения двух Rectangleобъекты по площади.Следующий код - это то, что я придумал для этого:
import java.util.Comparator;
public class RectangleComparator implements Comparator<Rectangle> {
public int compare(Rectangle r1, Rectangle r2) {
double areaDifference = r1.calculateArea() - r2.calculateArea();
if (areaDifference != 0) {return (int) areaDifference;}
if (areaDifference < 0) {return -1;}
else if (areaDifference == 0) {return 0;}
else {return 1}
}
}
}
Мой последний класс, который я должен был создать, был класс RectangleSortTest, где метод создает список, содержащий пять объектов Rectangle, а не по порядку по области.Метод должен напечатать список, отображающий площадь каждого прямоугольника.Затем отсортируйте список и распечатайте список снова, показывая, что список отсортирован по областям.Вот что я придумал:
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
public class RectangleSortTest {
public static void main(String[] args) {
List<Rectangle> list = new ArrayList<>();
list.add(new Rectangle (12, 15));
list.add(new Rectangle (5, 2));
list.add(new Rectangle (19, 10));
list.add(new Rectangle (9, 5));
list.add(new Rectangle (6, 10));
System.out.printf("Unsorted list elements:%n%s%n", list);
Collections.sort(list, new RectangleComparator());
System.out.printf("Sorted list elements: %n%s%n", list);
}
}
Кажется, все работает правильно, но когда я запускаю программу и отображаю следующие результаты:
Несортированные элементы списка: [Rectangle @ 7852e922, Прямоугольник @ 4e25154f, Прямоугольник @ 70dea4e, Прямоугольник @ 5c647e05, Прямоугольник @ 33909752] Элементы отсортированного списка: [Прямоугольник @ 4e25154f, Прямоугольник @ 5c647e05, Прямоугольник @ 33909752, Прямоугольник @ 7852e922 * 101 * 101
1013 *1013* 1013 * 103 * 703 * 703) * 703 *1013* 1013 *1013* 103 * 703] * 703] * 703] * 703] * 703 * 703] * 703] * 703a] 703]Посмотрите на это, кажется, объекты сортируются правильно, но я не могу понять, почему он не будет отображать площадь каждого треугольника вместо результатов, которые я получил.
Любая помощь будет оценена.