现在,当运行我的rational程序时,当我创建一个分子为2,分母为0的新rational时,得到1,我的老师想让我用1代替0来代替分母,但是每当我试图在reduce方法中添加if时,我就不能得到堆栈溢出错误,而reduce方法用来将分数简化为最简单的形式。我也尝试过在包含分子和分母的rational对象所在的构造函数中添加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);
}
1条答案
按热度按时间7fhtutme1#
我不完全理解这个任务,也不能解释问题的合理部分,但是堆栈溢出错误是由函数reduce引起的。问题是这个函数没有端点,因为它是递归的,所以函数调用将在堆栈上累积,直到没有更多可用空间,从而导致堆栈溢出。以下更改将修复堆栈溢出错误。
如果您正在寻找一个能找到最大公分母的方法,那么下面对函数所做的更改应该是可行的。