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