Java 分数计算器在尝试化简时抛出被零除的异常
Java fraction calculator throws exception for division by zero when trying to simplify
我有以下 class 我试图用它来执行分数之间的计算但是我时不时地从简化函数中得到一个除以零的异常,我无法弄清楚为什么这样做
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;
}
}
当 top
为零时,语句 bottom % top
产生被零除的错误。
您可以通过将 simplify()
方法的第一行更改为以下内容来修复它:
if (top != 0 && bottom % top == 0) {
我有以下 class 我试图用它来执行分数之间的计算但是我时不时地从简化函数中得到一个除以零的异常,我无法弄清楚为什么这样做
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;
}
}
当 top
为零时,语句 bottom % top
产生被零除的错误。
您可以通过将 simplify()
方法的第一行更改为以下内容来修复它:
if (top != 0 && bottom % top == 0) {