Search code examples
exceptionfractionsdivide-by-zero

Java fraction calculator throws exception for division by zero when trying to simplify


I have the following class which I am trying to use to perform calculations between fractions however every now and again i get a division by zero exception from on the simplify function and i cannot work out why it is doing it

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

Solution

  • The statement bottom % top yields a divide by zero error when top is zero.

    You can fix it by changing the first line of your simplify() method to this:

    if (top != 0 && bottom % top == 0) {