为什么我不能从这个Java程序中的方法返回一个有理数?

时间:2016-04-05 23:43:41

标签: java class methods

 public Rational max (Rational r) 
{
    double float1 = numerator/denominator;
    double float2 = r.getNumerator()/r.getDenominator();
    if (float1>float2)
    return float1;
    else
    return float2;
}

public double floatvalue(Rational r)
{
    double den = denominator * r.getDenominator();
    double num = numerator * r.getDenominator() + r.getNumerator() * denominator;
    return num/den;
}

我的第二个方法(floatvalue)允许我返回num / den,即使它们是双变量。但是,它不会让我返回float1或float2,因为它们是double值。知道为什么会这样吗?

1 个答案:

答案 0 :(得分:0)

方法 max()的类型为 Rational ,因此它将返回 Rational 对象(这就是为什么它不能返回 double 值。 float1 float2 分母/分子的结果,分母/分子 Rational 类的变量。您想要检查哪个Rational数字更大。要做到这一点,你不应该返回除法的结果,而应该返回数字本身。并且,在此程序中,有理数由 Rational 类对象表示。因此,如果Rational数 r 大于当前有理数(即,调用实例方法的 Rational 对象 max()) ,你将返回 r 。否则,您将返回当前对象。为此,只需将 max()定义中的 if-else 语句修改为下面的语句即可。

if(float1>float2)
return this; //returns the current object
else
return r;

我还希望你再注意一件事。如果类 Rational 的变量分子分母的类型为 int ,那么请修改此分区方式:

double float1 = (double)numerator/(double)denominator;

以及

double float2 = (double)r.getNumerator()/(double)r.getDenominator();

如果方法 getNumerator() getDenominator()也是 int 类型。这是为了避免两个整数的除法,因为如果发生这种情况,结果的小数部分将被忽略,结果也将是一个整数。因此, 0.00125 将变为 0 ,如果 float1 float2 变为 0 ,然后你会在 max()中抛出一个运行时错误,表示没有返回任何值。

希望你理解我的解释。

编辑:我写了一个示例程序,可以帮助您更好地理解这个概念。 Click here to see the program