вызывая методы друг в друге в классе Rational - PullRequest
0 голосов
/ 28 сентября 2019

это пример моего класса Rational, в котором я его строю и делаю математику и алгоритмы в каждом методе

public class Rational {

private int Numerator;
private int Denominator;

public Rational() {
    Numerator = 1;
    Denominator = 1;
}

public Rational(int a, int b) {
    if (b == 0) {
        throw new IllegalArgumentException(" Cannot divide by zero ");
    }
    this.Numerator = a;
    this.Denominator = b;
}

моя проблема в том, что я не хочу повторять методы каждый раз, как вызнаю, что операция деления - это операция умножения с инвертированием другого рационального числа, но проблема здесь в том, что я не знаю как вызвать метод умножения в делении в этом случае:

public Rational multiply(Rational other) {
    int numerator = this.Numerator * other.Numerator;
    int denominator = this.Denominator * other.Denominator;
    return new Rational(numerator, denominator);
}

public Rational divide(Rational other) {
    other.invert();
    return null;// where to call the multiply method ?
}

1 Ответ

0 голосов
/ 28 сентября 2019

Rational почти наверняка должен быть неизменным: два поля должны быть окончательными.

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

Метод инвертирования должен возвратить новый экземпляр рационального, который затем вы можете передать multiply:

return multiply(other.invert());
...