Как сделать так, чтобы при выполнении любого метода класса выполнялось одно и то же действие?

Я создал класс обыкновенной дроби (делаю калькулятор дробей). Надо, чтобы десятичное значение дроби обновлялось после каждого вызова любого метода класса (decValue = intpart + numerator + denuminator;).

Вот, пока что рабочий класс:


public class Drobe {
    public int intpart = 0;
    public int numerator = 0;
    public int denuminator = 1;
    public float decValue = 0;

    public Drobe (int numerator, int denuminator) {
        this.numerator = numerator;
        this.denuminator = denuminator;
        decValue = intpart + numerator + denuminator;
    }

    public Drobe (int intpart, int numerator, int denuminator) {
        this.intpart = intpart;
        this.numerator = numerator;
        this.denuminator = denuminator;
        decValue = intpart + numerator + denuminator;
    }

    public void reduce() {
        for (int lcd = Math.min(numerator,  denuminator); lcd >= 1; lcd--) {
            if (numerator % lcd == 0 && denuminator % lcd == 0) {
                numerator /= lcd;
                denuminator /= lcd;
                break;
            }
        }
        decValue = intpart + numerator + denuminator;
    }

    public void toNormal() {
        intpart += numerator / denuminator;
        numerator = numerator - intpart * denuminator;
        decValue = intpart + numerator + denuminator;
    }
}```

Ответы (1 шт):

Автор решения: Nimaniel

Вам в любом случае придется прописывать выполнение кода в каждом методе. Разве что более хорошей практикой является вынос такого кода в отдельный метод.

private void updateValue() {
    decValue = intpart + numerator + denuminator;
}

Так же хотелось обратить внимание на несколько моментов.

Когда вы приводите дробь к правильному виду toNormal(), вы не учитываете, что пользователь мог задать целую часть числа через второй конструктор.

Например, если я создам Drobe s = new Drobe(1, 20, 10);, а потом нормализую её, то внезапно получу 3 целых -10/10. Чтобы избежать такой ситуации достаточно использовать numerator = numerator % denuminator;.

Второй момент это decValue. Если имелось ввиду десятичное значение дроби, то, я полагаю, вы должны использовать decValue = intpart + (float)numerator/denuminator;.

→ Ссылка