2014-03-02 58 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

不客氣。如果有幫助請接受答案。 –