Калькулятор дробей Java выдает исключение для деления на ноль при попытке упростить

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

public class Fraction {

    private int top;
    private int bottom;

    Fraction(int t, int b) {
        top = t;
        bottom = b;
        simplify();
    }

    public int getTop() {
        return top;
    }

    public int getBottom() {
        return bottom;
    }

    public void simplify() {
        if (bottom % top == 0) {
            bottom /= top;
            top /= top;
        } else {
            int divisor = gcd(bottom, top);
            top /= divisor;
            bottom /= divisor;
        }
    }

    public Fraction add(Fraction f) {
        if (bottom == f.getBottom()) {
            return new Fraction(top + f.getTop(), bottom);
        } else {
            return new Fraction(((top * f.getBottom()) + (f.getTop() * bottom)), bottom * f.getBottom());
        }
    }

    public Fraction subtract(Fraction f) {
        if (bottom == f.getBottom()) {
            return new Fraction(top - f.getTop(), bottom);
        } else {
            return new Fraction(((top * f.getBottom()) - (f.getTop() * bottom)), bottom * f.getBottom());
        }
    }

    public Fraction multiply(Fraction f) {
        return new Fraction(top * f.getTop(), bottom * f.getBottom());
    }

    private static int gcd(int a, int b) {
        if (a == 0 || b == 0) {
            return a + b;
        } else {
            return gcd(b, a % b);
        }
    }

    @Override
    public String toString() {
        return top + "/" + bottom;
    }
}

person Conor    schedule 02.02.2015    source источник


Ответы (1)


Оператор bottom % top дает ошибку деления на ноль, когда top равно нулю.

Вы можете исправить это, изменив первую строку вашего метода simplify() на это:

if (top != 0 && bottom % top == 0) {
person gknicker    schedule 02.02.2015