将分数与Bool进行比较

时间:2014-03-02 06:42:08

标签: java boolean fractions

所以我的equals类有问题

public boolean equals(Object other) {
    if (other.equals(this.numerator) &&  other.equals(this.denominator))
        return true;
    else
        return false;
}

它给出了9/2 eq 9/2 = false的结果。

(我的其他裁判代码) https://gist.github.com/anonymous/6604f427cc9d17391478

我做错了什么?

我编辑了代码但仍然处理了boolean和int

的错误
public boolean equals(Object other) {
    if (other.equals(this.numerator) == getNumerator() &&  other.equals(this.denominator)== getDenominator())
        return true;
    else
        return false;
}

2 个答案:

答案 0 :(得分:2)

在实施equals时,在检查对象是否相等之前,您应该考虑下一个场景:

  • 这两个实际上是对同一个对象的引用
  • other对象为null
  • other对象是不同类型的实例

当检查两个对象之间的相等性时,您应该考虑比较中涉及的每个字段的 nullness 。在大多数IDE中,equals可以在eclipse中自动生成:

  

Alt + Shift + s - >生成hashCode()和equals()

下一个是由eclipse生成的:

    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        A other = (A) obj;
        if (denominator == null) {
            if (other.denominator != null)
                return false;
        } else if (!denominator.equals(other.denominator))
            return false;
        if (numerator == null) {
            if (other.numerator != null)
                return false;
        } else if (!numerator.equals(other.numerator))
            return false;
        return true;
    }

答案 1 :(得分:0)

return
    (other.numerator.equals(this.numerator)
    && 
    other.denominator.equals(this.denominator))

但是,这并不考虑1/2 == 2/4。