2014-03-02 54 views
0

比较馏分,使林和我平等类与布尔

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

出现问题,将会给我的EQ 9/2 9/2 =假的结果。

(我对裁判的代码休息) https://gist.github.com/anonymous/6604f427cc9d17391478

我到底做错了什么?

我编辑的代码,但仍和处理布尔的错误和int

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

你应该用'Java'标签标记你的问题 – Ofiris

+0

对不起! – user3369798

+0

您的逻辑不正确,因为您应该使用此对象的分子检查另一个对象的分子,并使用此对象的分母检查另一个对象的分母。目前,你正在用分母和这个对象的分子来检查另一个对象的相等性,它总是会给你错误的。 –

回答

2

在实施equals,检查前如果对象是平等的,你应该考虑的下一个情景:

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

当检查equali在两个对象之间你应该考虑参与比较的每个领域的nullness。在大多数IDE equals可自动生成,在蚀:

ALT + SHIFT + S - >生成

下一由蚀产生hashCode()和equals()方法:

@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; 
    } 
0
return 
    (other.numerator.equals(this.numerator) 
    && 
    other.denominator.equals(this.denominator)) 

病程这并不认为1/2 == 2/4。

+0

谢谢你好先生! – user3369798

+0

不客气。如果有帮助请接受答案。 –