【发布时间】:2016-06-04 21:10:51
【问题描述】:
我正在为一个类实现 Comparator,在覆盖 compare 时,我有一个问题。
double data1 = GetValueOf(Data1);
double data2 = GetValueOf(Data2);
int compareResult = Double.compare(data1, data2);
如果 data1 和/或 data2 是 NaN 会发生什么?
这仍然是一个有效的比较吗?
更新 我不明白为什么这个问题被低估了。只是为了解释一下,我正面临一个“Comparison method violates general contract”的问题。
我正在这样做……
if(Double.isNaN(data1)) data1 = Double.Positive_Infinity;
if(Double.isNaN(data2)) data2 = Double.Positive_Infinity;
在 Double.compare 之前,但仍然出现此错误。
所以,我需要了解是否有一些我不了解的基本内容。
【问题讨论】:
-
您是否阅读了 Java 语言规范以找到答案?
-
如果您覆盖
compare()FromComparator您并且只有您负责验证和比较数据。Technology 不负责IF在比较过程中发现任何无效数据提出了Exception -
@JimGarrison,我确实检查了 java 文档,但我想对使用 Double.compare 提出意见。
-
您是否阅读了它所引用的Double.compare 和Double.compareTo 的Javadocs? NaN 处理是否适合您,只有您可以根据数据结构的要求来确定。
标签: java double nan comparator