Java и дроби - PullRequest
       1

Java и дроби

0 голосов
/ 15 февраля 2020

Я пытаюсь добавить три метода экземпляра в интерфейс publi c класса 'Fraction', которые в результате все возвращают 'Fraction':

сложение, вычитание и умножение. возможно ли изменить его из моего текущего кода в методы экземпляра?

Я просто не могу заставить его работать

Вот мой код:

class Fraction {
    private Integer numerator;
    private Integer denumerator;

    public Fraction(Integer numerator, Integer denumerator) {

        int gcd = 1;

        for (int i = 1; i <= numerator && i <= denumerator; i++) {
            if (numerator % i == 0 && denumerator % i == 0)
                gcd = i;
        }
        this.numerator = numerator / gcd;
        this.denumerator = denumerator / gcd;
    }

    public Fraction(Integer numerator) {
        this.numerator = numerator;
        this.denumerator = 1;
    }

    public String toString() {

        return numerator + "/" + denumerator;
    }



    public static Fraction add(Fraction f1,Fraction f2){
        return new Fraction(f1.numerator*f2.denumerator+f2.numerator*f1.denumerator,f1.denumerator*f2.denumerator);
    }
    public static Fraction subtract(Fraction f1,Fraction f2){
        return new Fraction(f1.numerator*f2.denumerator-f2.numerator*f1.denumerator,f1.denumerator*f2.denumerator);
    }
    public static Fraction mul(Fraction f1,Fraction f2){
        return new Fraction(f1.numerator*f2.numerator,f1.denumerator*f2.denumerator);
    }
}

class Main
{
    public static void main(String[] arguments)
    {
        final Fraction HALF = new Fraction(1, 2);
        final Fraction THREE_FIFTH = new Fraction(3, 5);
        System.out.println(HALF.add(HALF, THREE_FIFTH).toString());
        System.out.println(THREE_FIFTH.subtract(HALF, THREE_FIFTH).toString());
        System.out.println(HALF.mul(HALF, THREE_FIFTH).toString());
    }
}

1 Ответ

1 голос
/ 15 февраля 2020
public static Fraction add(Fraction f1,Fraction f2){
  return new Fraction(f1.numerator*f2.denumerator+f2.numerator*f1.denumerator,
                      f1.denumerator*f2.denumerator);
}

- это метод класса (из-за static ему не нужен экземпляр для вызова "on").

Создание этого метода экземпляра будет выглядеть как

public Fraction add(Fraction other){
  return new Fraction(this.numerator*other.denumerator+other.numerator*this.denumerator,
                      this.denumerator*other.denumerator);
}

конечно, вам на самом деле не нужно писать this s, просто они подчеркивают, что f1 стал текущим объектом, а f2 стал единственным аргументом.

Тогда вы можете использовать его как

Fraction HALF = new Fraction(1, 2);
Fraction THREE_FIFTH = new Fraction(3, 5);
System.out.println(HALF.add(THREE_FIFTH));

без повторения HALF (как HALF.add(HALF,THREE_FIFTH) в исходном коде).

Дополнительный комментарий: методы класса (static вещи) могут если имя будет передано через имя класса, ваш исходный код будет более условно вызываться в форме Fraction.add(...):

System.out.println(Fraction.add(HALF,THREE_FIFTH));

(System.out.println() знает, что он должен вызывать toString(), так что вы на самом деле не нужно сделать это самостоятельно)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...