java如何将0作为分母显示在rational类中

cpjpxq1n  于 2021-06-29  发布在  Java
关注(0)|答案(1)|浏览(341)

现在,当运行我的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);
}
7fhtutme

7fhtutme1#

我不完全理解这个任务,也不能解释问题的合理部分,但是堆栈溢出错误是由函数reduce引起的。问题是这个函数没有端点,因为它是递归的,所以函数调用将在堆栈上累积,直到没有更多可用空间,从而导致堆栈溢出。以下更改将修复堆栈溢出错误。

private static int reduce(int numerator, int denominator) {
    if(denominator == 0) { //assuming this is the end point
        numerator = 1;  
        return numerator; //this ends the recursive call
    }
    return reduce(denominator, numerator % denominator);
}

如果您正在寻找一个能找到最大公分母的方法,那么下面对函数所做的更改应该是可行的。

private static int reduce(int numerator, int denominator) {
    if(denominator == 0) { 
        return numerator; 
    }
    return reduce(denominator, numerator % denominator);
}

相关问题