AssertionError - сумматор мнимых и действительных чисел - PullRequest
0 голосов
/ 01 июля 2019

Я получаю сообщение об ошибке:

java.lang.AssertionError: expected: learning.java.advancedoop2.MyComplex<(2.0+10.0i)> but was: learning.java.advancedoop2.MyComplex<(2.0+10.0i)>
Expected :learning.java.advancedoop2.MyComplex<(2.0+10.0i)> 
Actual   :learning.java.advancedoop2.MyComplex<(2.0+10.0i)>

Сейчас я работаю над классом MyComplex, как показано в 3.1: http://www.ntu.edu.sg/home/ehchua/programming/java/J3f_OOPExercises.html#zz-2

Вот часть кода, которая имеет отношение:

package learning.java.advancedoop2;

public class MyComplex {

    private double real = 0.0;
    private double imag = 0.0;

public MyComplex() {

}

    public MyComplex add(MyComplex right) {
        this.imag += right.imag;
        this.real += right.real;
        return this;
    }
}

Я пытался сделать тесты, и когда я их запускал, ошибка, которая у меня возникла, была вверх ногами, вот часть моего тестового кода:

@Test
public void add() {

    MyComplex myComplexFirst = new MyComplex(1, 5);
    MyComplex myComplexSecond = new MyComplex(1, 5);
    MyComplex myComplexThird = new MyComplex(myComplexFirst.getReal() + myComplexSecond.getReal(), myComplexFirst.getImag() + myComplexSecond.getImag());
    myComplexFirst.add(myComplexSecond);
    MyComplex newComplex = myComplexFirst;
    assertEquals(newComplex, myComplexThird);
}

Ответы [ 2 ]

2 голосов
/ 01 июля 2019

Вы переопределили метод equals в своем пользовательском классе?

Если вы этого не сделали, по умолчанию используется сравнение ссылок. Это объяснило бы сообщение об ошибке, которое вы получаете.

Это сбивает с толку, потому что вы переопределили метод toString, который отображает оба экземпляра, чтобы иметь одинаковые значения.

0 голосов
/ 01 июля 2019

Вам необходимо переопределить метод equals, чтобы java знал, как сравнивать два MyComplex объекта.Сейчас он не знает, что вы хотите сравнить объекты на основе значений real и imag.

@Override
public boolean equals(Object o) { 

    // If the object is compared with itself then return true   
    if (o == this) { 
        return true; 
    } 

    // Check if o is an instance of MyComplex
    if (!(o instanceof MyComplex)) { 
        return false; 
    } 

    // typecast o to MyComplex so that we can compare data members  
    MyComplex c = (MyComplex) o; 

    // Compare the data members and return accordingly  
    return Double.compare(real, c.getReal()) == 0
            && Double.compare(imag, c.getImag()) == 0; 
} 
...