2011-11-23 52 views
1

我目前正在研究java中的一個簡單的線程序。將不會有實際的GUI,因此它完全基於文本。基本的java等於()覆蓋幫助需要

我們需要有一個點類和一個包含點對象的線類。

我遇到的問題涉及到我的點類的equals方法。考慮到每個點只有兩個POSITIVE int值,一個x和ay,並且我在這裏遇到問題,我擔心在必須比較行時會遇到問題,這將涉及比較點,int寬度和字符串顏色。

這是我的等級方法爲我的點類的代碼看起來。

@Override 
public boolean equals(Point that) { 
    if(this==that) 
     return true; 
    //if 
    if(this.x==that.getX() && this.y==that.getY()) 
     return true; 
    return false; 
} 

任何和所有的幫助,將不勝感激。

+3

問題是什麼是什麼呢?此外,該代碼顯然來自Point類,而不是第一行。 – Viruzzo

+2

我不明白你的問題,實際上...... –

+2

'.equals()'需要一個對象。您需要確保該對象不是空和正確的類型。 – Gray

回答

4

簽名需要包含Object,而不是Point。然後您需要明顯的檢查來確保該對象實際上是一個點並且它是非空的。

除此之外,正如你所說的那樣,我沒有看到這個方法存在任何問題,只要我能弄清楚它是反射的,對稱的,一致的和傳遞的。如果你的班級使用雙打,那麼我會說比較他們時,增加一個delta值 - 但顯然與整數,這不是一個問題。

雖然間接的問題是,你真的應該重寫哈希碼以及以相同的方式運行,否則當你將點加入到使用hashcode()的集合中時會遇到奇怪的問題。比較對象以相同的方式)

+0

謝謝你。我想知道爲什麼IDE告訴我這不是平等的。我不明白的另一件事是如何/爲什麼哈希碼需要/被編輯。 – haloid2010

+0

沒問題 - 在這裏看到一個深入的解釋:http:// stackoverflow。com/questions/27581/overriding-equals-and-hashcode-in-java – berry120

+0

如果要比較的對象爲null,則問題中的方法將拋出空指針異常。一定要檢查爲空。 –

1

對於一個簡單的類,只包含兩個整數,下面的hashCode和equals方法是適當的:

/* 
* (non-Javadoc) 
* 
* @see java.lang.Object#hashCode() 
*/ 
@Override 
public int hashCode() 
{ 
    final int prime = 31; 
    int result = 1; 
    result = prime * result + x; 
    result = prime * result + y; 
    return result; 
} 

/* 
* (non-Javadoc) 
* 
* @see java.lang.Object#equals(java.lang.Object) 
*/ 
@Override 
public boolean equals(Object obj) 
{ 
    if (this == obj) 
     return true; 
    if (obj == null) 
     return false; 
    if (getClass() != obj.getClass()) 
     return false; 
    Point other = (Point) obj; 
    if (x != other.x) 
     return false; 
    if (y != other.y) 
     return false; 
    return true; 
} 
0

你給Line類的equals方法,但我不t認爲一條線可以等於一個點。線可以包含一個點。你的意思是點等於方法?

0

查看Object.equals()方法的定義。特別看看參數的類型。任何覆蓋equals()必須都有一個Object參數。

public boolean equals(Object that) { ... } 
0

讓我試試這個:

@Override 
public boolean equals(Object o) 
{ 
    //Cast the object o to Point instance 
    if(!(o instanceof Point)) 
     return false; 
    Point obj = (Point)o; 
    if(obj==null) 
     return false;//Checking if null 
    else if.....//test properties using cast object obj 
}