TimSort异常表示什么?

时间:2019-03-30 19:43:28

标签: java

我正在解决这个问题,我应该从给定的点平面中找到包含三个以上点的线段。我正在使用比较器对点进行排序,将一个点作为参考,并根据参考的斜率对其他点进行排序,而我在输入大时遇到问题。我收到一个错误消息,说“比较方法违反了它的一般约定!”。

我尝试过修改比较器,但是它似乎适用于少量输入。

`public Comparator<Point> slopeOrder() {
        return new Comparator<Point>() {
            @Override
            public int compare(Point p1, Point p2) {
                double slope1 = slopeTo(p1);
                double slope2 = slopeTo(p2);
                return slope1 == slope2 ? 0 : (slope1 > slope2 ? 1 : -1);
            }
        };
    }`

这段代码是用Point类编写的,我的代码应该输出Line片段,但是我得到的排序错误是

Exception in thread "main" java.lang.IllegalArgumentException: Comparison method violates its general contract!
    at java.base/java.util.TimSort.mergeHi(TimSort.java:899)
    at java.base/java.util.TimSort.mergeAt(TimSort.java:516)
    at java.base/java.util.TimSort.mergeCollapse(TimSort.java:441)
    at java.base/java.util.TimSort.sort(TimSort.java:245)
    at java.base/java.util.Arrays.sort(Arrays.java:1440)
    at FastCollinearPoints.<init>(FastCollinearPoints.java:28)
    at FastCollinearPoints.main(FastCollinearPoints.java:87)

0 个答案:

没有答案