Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 这个比较国怎么能不遵守其总合同?_Java_Exception_Comparator - Fatal编程技术网

Java 这个比较国怎么能不遵守其总合同?

Java 这个比较国怎么能不遵守其总合同?,java,exception,comparator,Java,Exception,Comparator,[问题已解决,请参见底部的编辑] 我以前使用过的这个方法现在抛出了一个异常,原因是没有遵循它的总合同 private Face[] sortByDistance(Face[] faces, final Point3D p) { final Comparator<Face> faceComparator = new Comparator<Face>() { @Override public int compare(Face o1, F

[问题已解决,请参见底部的编辑]

我以前使用过的这个方法现在抛出了一个异常,原因是没有遵循它的总合同

private Face[] sortByDistance(Face[] faces, final Point3D p) {
    final Comparator<Face> faceComparator = new Comparator<Face>() {
        @Override
        public int compare(Face o1, Face o2) {
            return MathUtils.distance(o2.getAveragePoint(), p) - MathUtils.distance(o1.getAveragePoint(), p);
        }
    };
    Arrays.sort(faces, faceComparator); // Exception occurs here.
    return faces;
}
如果有帮助的话,我只是在把它放在一个对象中之后才注意到这一点,该对象扩展线程并运行自身,并不断循环通过一系列方法,其中一个方法调用上述方法,但有一个例外。直到现在它还没有这样做,所以如果可能有一些并发的原因,我会期待它


[编辑]问题在于参数中的Point3D“p”是一个可变对象,而另一个线程上的对象正在对其进行更改。

这通常意味着您在传递性方面存在一些问题。我建议手动进行排序,并记录每次比较的结果。距离是否可能四舍五入,以便有时将差值四舍五入为零,而不是略微为正或为负?您能否举例说明哪些点会导致问题,哪些点不会?什么是
MathUtils.distance
在做什么?它返回一个整数结果,该结果可能无法真实反映点的3D距离。如果该结果在线程中运行,是否确定
getAveragePoint
方法每次调用时都返回相同的结果?@Henry您可能就在那里。我会很快检查的。这通常意味着你在及物性方面有问题。我建议手动进行排序,并记录每次比较的结果。距离是否可能四舍五入,以便有时将差值四舍五入为零,而不是略微为正或为负?您能否举例说明哪些点会导致问题,哪些点不会?什么是
MathUtils.distance
在做什么?它返回一个整数结果,该结果可能无法真实反映点的3D距离。如果该结果在线程中运行,是否确定
getAveragePoint
方法每次调用时都返回相同的结果?@Henry您可能就在那里。我会很快检查的。
(2.9081598E-6,-38.519745,18.787334)
(-15.432643,38.19713,11.813029)
(-20.884119,28.744518,-23.96541)
(5.961947,16.380322,-39.151947)
(3.7570944,3.6281846,-42.537693)
(-20.747366,9.237327,-36.34492)
(-17.694483,20.355177,-33.30626)
(-5.3533697,30.360487,-29.771076)
(14.785507,34.832466,-20.12021)