Формула сложения верна, но без equals assertEquals сравнит ссылки. Нужны неизменяемость, запрет нулевого знаменателя, нормализация дроби и защита от переполнения.
Выполнить ревизию кода
Формула сложения верна, но без equals assertEquals сравнит ссылки. Нужны неизменяемость, запрет нулевого знаменателя, нормализация дроби и защита от переполнения.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Требуется осуществить проверку написанного кода.
public class Fraction {
public Integer num;
public Integer den;
public Fraction(Integer num, Integer den) {
this.num = num;
this.den = den;
}
public Fraction addFraction(Fraction f1, Fraction f2) {
Integer commonDen = f1.den * f2.den;
Integer newNum = f1.num * f2.den + f2.num * f1.den;
return new Fraction(newNum, commonDen);
}
}
public class TestFraction {
@Test
public void addFractionTest() {
Fraction f1 = new Fraction(1, 2);
Fraction f2 = new Fraction(2, 3);
Fraction expected = new Fraction(7, 6);
Fraction actual = f1.addFraction(f1, f2);
assertEquals(expected, actual);
}
}
Ответ
Формула сложения верна, но без equals assertEquals сравнит ссылки. Нужны неизменяемость, запрет нулевого знаменателя, нормализация дроби и защита от переполнения.
Закройте поля и сделайте add методом с одним операндом либо статической функцией с двумя. Для равенства значений сократите дробь на НОД, перенесите знак в числитель и реализуйте equals/hashCode. Integer допускает null; int проще, но тоже переполняется, поэтому для больших значений подходит BigInteger. Проверьте отрицательные дроби, ноль, 1/2 + 1/2 и неверный знаменатель. Public-классы должны находиться в отдельных Java-файлах.