@Override
public boolean equals(Object obj) {
if(this == obj) return true;
if(obj == null) return false;
if (!(obj instanceof Matrix)) return false;
Matrix matrix = (Matrix) obj;
int counter = 0;
if(this.rowIndex == matrix.rowIndex && this.columnIndex == matrix.columnIndex){
for(int i=0; i<this.rowIndex; i++)
for(int j=0; j<this.columnIndex; j++)
if(this.matrix[i][j] == matrix.matrix[i][j]);
counter++;
}
return counter == (matrix.rowIndex * matrix.columnIndex);
}
这是我目前的equals实现,它比较两个矩阵是否相同。问题是,当我运行测试时,它说它们是不同的。
@Test
void changeValorTest(){
Matrix matrix1 = new Matrix(3, 3, true);
matrix1.changeValor(1,1,5);
Integer[][] matrix2Real = {{0, 0, 0}, {0, 5, 0}, {0, 0, 0}};
Matrix matrix2 = new Matrix(matrix2Real, true);
assertEquals(matrix1.matrix, matrix2.matrix);
assertThrows(IllegalArgumentException.class, () -> matrix1.changeValor(0,-10, 7));
}
以及输出:
org.opentest4j.AssertionFailedError: expected: [[Ljava.lang.Integer;@305fd85d<[[0, 0, 0], [0, 5, 0], [0, 0, 0]]> but was: [[Ljava.lang.Integer;@7a1ebcd8<[[0, 0, 0], [0, 5, 0], [0, 0, 0]]>
Expected :[[Ljava.lang.Integer;@305fd85d
Actual :[[Ljava.lang.Integer;@7a1ebcd8
我在矩阵课上有等号。是因为它的实施,还是我做错了什么?请帮忙
2条答案
按热度按时间aelbi1ox1#
只是猜测一下,因为我看不到对象的其余部分,但是您正在比较两个矩阵中i,j位置中包含的对象是否相同。你需要比较他们的价值。
另一方面,您正在比较matrix类的内部matrix字段,但是您似乎只为matrix类重写equals。尝试改变
到
8fsztsew2#
删除此行末尾的分号。
这里有分号,代码就相当于
…这不是你想要的。
(这是使用自动格式化程序的一个很好的理由,它将显示错误的缩进。)