2014-02-10 54 views
0

我試圖做一個有理數的類,並重寫equals和hash代碼的方法。但是,我的平等在這種情況下會迴歸真實,即它的分子和分母是不同的。任何想法可能會造成這種情況?覆蓋等於方法問題

public boolean equals(Object rhs) { 
    if (this == rhs){ 
     return true; 
    } 
    if (rhs == null){ 
     return false; 
    } 
    if (!(rhs instanceof Rational)){ 
     return false; 
    } 
    Rational other = (Rational) rhs; 
    if (denom == other.denom){ 
     if (num == other.num);{ 
      return true; 
     } 
    } 
    return false; 
} 

回答

4

這是問題(如果不是筆誤):

if (num == other.num);{ 

分號指if語句是空語句,所以它的評價並沒有真正涉足平等的驗證過程。只需刪除分號:

if (num == other.num){ 
1

刪除此行上的分號,該行用作if語句的主體。

if (num == other.num);{ 

隨着分號,如果分母相等,則true將被退回;分子的檢查被有效地忽略。

+0

就這樣做了。謝謝你發現 –

1

取出;if (num == other.num); {後,它changint到if (num == other.num) {

離開它在那裏,它基本上在if後什麼都沒有,然後進入塊:

{ 
    return true; 
} 

所以它總是會在那返回true點。