【问题标题】:Comparable with doubles与双打相媲美
【发布时间】:2016-06-07 04:09:39
【问题描述】:

假设已经定义了一个 Point2D 类,用于存储具有 x 和 y 坐标(均为双精度)的二维点。该类包括以下成员:

您的任务是通过添加适当的 compareTo 方法将类修改为 Comparable。点应该相对于它们与原点的距离进行比较,靠近原点的点被认为比远离原点的点“更小”。两点之间的距离定义为 x 和 y 坐标差的平方和的平方根。

我不确定当有双倍时如何实现 compareTo 方法。 对于整数和字符串,我将使用以下语法:

public int compareTo(object name) {
    // comparing integers
    if (this.object != other.object) {
        return this.field - other.field;
    } else { // comparing strings
        return toString().compareTo(other.toString());
    }
}

在比较两个双精度时是否有通用的实现策略,例如货币或上面的 Point 类?

【问题讨论】:

  • 所以5, 00, 5compareTo() 而言是“相等的”,对吧?猜测Point.compareTo() 的javadoc 应该说“注意:这个类有一个与equals 不一致的自然顺序。”,正如Comparable.compareTo() 的javadoc 中所建议的那样。

标签: java comparable


【解决方案1】:

使用int Double.compare(double d1, double d2)

您也不应该这样做this.field - other.field,因为在数字溢出的情况下这可能会返回不正确的结果。使用int Integer.compare(int x, int y)

【讨论】:

    猜你喜欢
    • 2012-07-16
    • 2011-01-07
    • 2011-03-17
    • 1970-01-01
    • 1970-01-01
    • 2015-11-01
    • 2016-04-19
    • 2020-01-08
    • 1970-01-01
    相关资源
    最近更新 更多