繁体   English   中英

Java:实现用于比较两个double [] []数组的equals方法

[英]Java: Implementing equals method for comparing two double[][] arrays

我正在尝试在我的类中实现equals方法。.注意:'_ _data '属性是double[][]数组,我试图在两个对象之间进行比较。

无论如何它都可以编译,但是我总是得到一个错误的答案,这不可能是因为两个数组都是相同的:o

难道我做错了什么? 还有其他简单的方法吗? (仅使用对象类中的等于!!)

我的代码(JAVA):

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

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

采用

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

在阵列上进行测试。

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

您可以看一下描述deepEquals方法的deepEqualsJava Arrays.equals()对于二维数组返回false

我将重写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));

Joshua Bloch在“有效Java”的第3章中告诉您如何实现equals和hashCode( 必须串联完成)。 那应该告诉您所有您需要了解的信息,以便覆盖班级的平等。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM