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)