如何在使用比较器接口时获取矩形对象的数组列表以显示每个矩形的面积

How to get an Array List of Rectangle objects to Display the area of each Rectangle while using the Comparator Interface

我有一个矩形 class,在部分代码中使用以下方法找到矩形 class 的面积:

public double calculateArea() {return this.width * this.height;}

我必须创建第二个 class 称为 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}
}
}
}

我必须创建的最后一个 class 是一个 RectangleSortTest class,其中该方法创建一个包含五个 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);
}
}

一切似乎 运行 正确但是当我 运行 程序并显示以下结果时:

未排序的列表元素: [矩形@7852e922,矩形@4e25154f,矩形@70dea4e,矩形@5c647e05,矩形@33909752] 排序列表元素: [矩形@4e25154f、矩形@5c647e05、矩形@33909752、矩形@7852e922、矩形@70dea4e]

如果你看一下对象似乎排序正确但我不明白为什么它不显示每个三角形的面积而不是我得到的结果。

如有任何帮助,我们将不胜感激。

您对 toString 的实施不输出区域 - 它使用默认实施。您需要覆盖它以根据您的矩形生成可用的字符串。 (注意 - 我说 "your" 矩形,因为很明显你没有使用 java.awt.Rectangle,它在其 toString 实现中输出 x、y、w、h 属性)

旁注 - 您的 compare 实施过于复杂。为什么不只是 return (int) areaDifference