在尝试简化时,Java分数计算器会抛出除以零的异常

时间:2015-02-02 17:40:50

标签: exception fractions divide-by-zero

我有以下类,我试图用它来执行分数之间的计算,但是我不时地从简化函数中得到除零异常,我无法弄清楚它为什么会这样做

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;
    }
}

1 个答案:

答案 0 :(得分:0)

bottom % top为零时,语句top会产生除零错误。

您可以通过将simplify()方法的第一行更改为:

来解决此问题
if (top != 0 && bottom % top == 0) {