Выполнить ревизию кода

Формула сложения верна, но без 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-файлах.

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее