2011-12-07 56 views
1

我試圖在我的類中實現equals方法.. 注意:'_data'屬性是一個double[][]數組,我嘗試在兩者之間進行比較對象。Java:實現equals方法來比較兩個double [] []數組

反正它編譯和一切,但我總是得到一個錯誤的答案,這不可能是因爲兩個數組都是相同的:○

我做錯了什麼?有沒有其他簡單的方法? (僅適用於使用等於從對象類!!)

我的代碼(JAVA):

public boolean equals(Object obj) { 
    if (!(obj instanceof MyClass)) { 
     return false; 
    } 

    MyClass myObj = (MyClass) obj; 
    return this._data.equals(myObj._data); 
} 
+0

你必須粘貼一個更大的代碼片段。現在很難判斷造成問題的原因。 – soulcheck

+5

您是否試過['java.util.Arrays.deepEquals()'](http://docs.oracle.com/javase/7/docs/api/java/util/Arrays.html)? –

+0

爲了調試的目的,你可以請'MyClass mc1 = new MyClass(); MyClass mc2 = mc1; boolean toCheck = mc1.equals(mc2);' Does toCheck == true? –

回答

0

我會覆蓋在MyClass的類equals方法。

@Override 
public boolean equals(Object obj) {//if you insist in using an Object as argument instead of double[][] 
    if (!(obj instanceof MyClass)) { 
     return false; 
    } 

    MyClass myObj = (MyClass) obj; 
    if(_data.length == myObj._data.length){ 
     for(int i=0; i<_data.length; i++){ 
     if(_data[i].length == myObj._data[i].length){ 
      for(int j=0; j<_data[i].length; j++){ 
       if(_data[i][j] != myObj._data[i][j]){ 
        return false; 
       } 
      } 
     }else{ 
      return false; 
     } 
     } 
    }else{ 
     return false; 
    } 
    return true; 
} 

此代碼考慮的情況下,你將有一個二維數組,但不是一個方陣。即先用三個元素,第二排有27個要素,第三行有N個元素... 例如,一個測試用例行:

double[][] first= new double[5][3]; 
    double[][] second= new double[5][3]; 
    for(int i=0; i<first.length; i++){ 
     for(int j=0; j<first[i].length; j++){ 
      first[i][j] = 5; 
     } 
    } 
    for(int i=0; i<second.length; i++){ 
     for(int j=0; j<second[i].length; j++){ 
      second[i][j] = 5; 
     } 
    } 
    second[4][2] = 2; 

    MyClass c1 = new MyClass(first); 
    MyClass c2 = new MyClass(second); 

    System.out.println("Equals: "+c1.equals(c2)); 
5

使用Arrays.deepEquals(data, myObj._data)

+0

謝謝,但我只問通過使用equals方法..(不是數組。等()) – Popokoko

8

使用

Arrays.deepEquals(this._data, myObj._data) 

使陣列上的測試。

+0

謝謝,但我只問通過使用equals方法..(不array.equals()) – Popokoko

+2

嚴重的是,當三個人告訴你做一個正確的內置於標準庫的方式,根據「我不能使用它」反對它,你需要證明爲什麼不行。 –

+0

如果您不想使用標準庫,請在兩個維上進行循環迭代。但那太可怕了。 –

0

約書亞·布洛克告訴你如何實現equals和hashCode(他們串聯完成)在「Effective Java」的chapter 3中。這應該告訴你所有你需要知道爲了覆蓋你的班級的平等。

+0

我相信這個問題不是關於實現equals,而是如何比較數組,主要是爲什麼equals方法不起作用與數組! –

+0

我認爲這是關於如何在OP的類中重寫equals,以便它可以使用數組數據成員進行比較。這是不正確的? 「我試圖在我的課程中實現equals方法......」 - 至於爲什麼,很明顯:equals只在未被覆蓋時執行「淺等於」。 – duffymo

+0

對於OP來說並不是那麼明顯,考慮到他的評論「......我相當積極,我可以將這些數組與'等號'進行比較......但是我可能會錯。其實我相信它比*淺等於*少* - 他只是比較參考。 –