现在,在运行我的 Rational 程序时,我在创建一个分子为 2 分母为 0 的新有理数时得到 1,我的老师希望我用 1 而不是 0 替换分母,但我无法得到每当尝试在 reduce 方法中添加 if 用于将分数简化为最简单的形式时,都会出现堆栈溢出错误。我还尝试在包含分子和分母的有理对象所在的构造函数中添加一个 if 语句,但仍然无济于事。当用 0 分子和 2 在分母中创建有理数时,我也有类似的问题。它应该返回 0/1,但返回的是 0。我相信这两个是相关的,有人知道这里发生了什么吗?
public Rational(int numerator, int denominator) {
int gcd = reduce(numerator, denominator);
num = numerator / gcd;
denom = denominator / gcd;
if(denom == 0)
{
denom = 1;
}
}
private static int reduce(int numerator, int denominator) {
if(denominator == 0) numerator = 1;
return reduce(denominator, numerator % denominator);
}