Как сделать так, чтобы при выполнении любого метода класса выполнялось одно и то же действие?
Я создал класс обыкновенной дроби (делаю калькулятор дробей). Надо, чтобы десятичное значение дроби обновлялось после каждого вызова любого метода класса (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 шт):
Вам в любом случае придется прописывать выполнение кода в каждом методе. Разве что более хорошей практикой является вынос такого кода в отдельный метод.
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;.