Как я могу упростить эту математическую операцию в моем вызове супер? - PullRequest
0 голосов
/ 08 февраля 2019

Я пытаюсь сделать проект, который моделирует продуктовый магазин, который продает различные десерты.В настоящее время я пытаюсь создать класс для многоуровневого торта, который получен из класса торта, который сам по себе является производным от абстрактного класса десерта.По сути, конструктор класса тортов имеет два параметра: имя и цену.Для многоуровневого торта цена - это цена основания + цена верха + дополнительные 10% от общей суммы.Я нашел способ сделать это, но это действительно длинная, уродливая строка кода.Я экспериментировал с несколькими способами, чтобы попытаться упростить его с помощью переменных, но я не могу найти способ, который работает с фактом, что это делается в super().Есть ли способ сделать это проще и эффективнее?Заранее спасибо!

Вот код:

public class TieredCake extends Cake {
    private Cake base;
    private Cake top;

    public TieredCake (Cake base, Cake top) {
        super(base.getName() + " with an upper tier of " + top.getName(), (base.getPrice() + top.getPrice()) * 0.10 + base.getPrice()+top.getPrice());
        this.base = base;
        this.top = top;
    }

    public Cake getBase() {
        return base;
    }

    public Cake getTop() {
        return top;
    }
}

1 Ответ

0 голосов
/ 08 февраля 2019

Разделение вызова на super на несколько строк немного помогает:

public TieredCake(Cake base, Cake top) {
    super(
        base.getName() + " with an upper tier of " + top.getName(),
        (base.getPrice() + top.getPrice()) * 0.10 + base.getPrice() + top.getPrice()
    );

    this.base = base;
    this.top = top;
}

Но, что более важно, давайте посмотрим на эту формулу.Есть немного упрощения, которое мы можем сделать на математическом уровне:

B := base.getPrice()
T := top.getPrice()

(B + T) * 0.1 + B + T
= (B * 0.1) + (T * 0.1) + B + T
= (B * 1.1) + (T * 1.1)
= (B + T) * 1.1

Это дает нам:

public TieredCake(Cake base, Cake top) {
    super(
        base.getName() + " with an upper tier of " + top.getName(),
        (base.getPrice() + top.getPrice()) * 1.1
    );

    this.base = base;
    this.top = top;
}
...