Основная программа:

аюсь работать сфракции на Яве.

Я хочу реализовать арифметические функции. Для этого мне сначала потребуется способ нормализовать функции. Я знаю, что не могу добавить 1/6 и 1/2, пока у меня не будет общего знаменателя. Я должен буду добавить 1/6 и 3/6. Наивный подход заставил бы меня добавить 2/12 и 6/12, а затем уменьшить. Как мне достичь общего знаменателя с наименьшими потерями в производительности? Какой алгоритм лучше для этого?

Версия 8 (спасибоhstoerr):

Улучшения включают в себя:

метод equals () теперь совместим с методом compareTo ()
final class Fraction extends Number {
    private int numerator;
    private int denominator;

    public Fraction(int numerator, int denominator) {
        if(denominator == 0) {
            throw new IllegalArgumentException("denominator is zero");
        }
        if(denominator < 0) {
            numerator *= -1;
            denominator *= -1;
        }
        this.numerator = numerator;
        this.denominator = denominator;
    }

    public Fraction(int numerator) {
        this.numerator = numerator;
        this.denominator = 1;
    }

    public int getNumerator() {
        return this.numerator;
    }

    public int getDenominator() {
        return this.denominator;
    }

    public byte byteValue() {
        return (byte) this.doubleValue();
    }

    public double doubleValue() {
        return ((double) numerator)/((double) denominator);
    }

    public float floatValue() {
        return (float) this.doubleValue();
    }

    public int intValue() {
        return (int) this.doubleValue();
    }

    public long longValue() {
        return (long) this.doubleValue();
    }

    public short shortValue() {
        return (short) this.doubleValue();
    }

    public boolean equals(Fraction frac) {
        return this.compareTo(frac) == 0;
    }

    public int compareTo(Fraction frac) {
        long t = this.getNumerator() * frac.getDenominator();
        long f = frac.getNumerator() * this.getDenominator();
        int result = 0;
        if(t>f) {
            result = 1;
        }
        else if(f>t) {
            result = -1;
        }
        return result;
    }
}

Я удалил все предыдущие версии. Моя благодарность:

Дэйв РэйКлетусduffymoДжеймсМилхаусОскар РейесДжейсон СФрансиско КанедоOutlaw ProgrammerBeska

Ответы на вопрос(19)

Ваш ответ на вопрос