Как получить список массивов объектов Rectangle для отображения области каждого Rectangle при использовании интерфейса компаратора - PullRequest
0 голосов
/ 23 ноября 2018

У меня есть класс 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]Посмотрите на это, кажется, объекты сортируются правильно, но я не могу понять, почему он не будет отображать площадь каждого треугольника вместо результатов, которые я получил.

Любая помощь будет оценена.

1 Ответ

0 голосов
/ 23 ноября 2018

Ваш имплмент toString не выводит область - он использует реализацию по умолчанию.Вам нужно будет переопределить его, чтобы сгенерировать пригодную для использования строку на основе вашего прямоугольника.(Примечание. Я говорю «ваш» прямоугольник, поскольку ясно, что вы не используете java.awt.Rectangle, который выводит свойства x, y, w, h в своей реализации toString)

Примечание: ваш compare реализация слишком сложна.Почему не просто return (int) areaDifference?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...