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值。知道为什么会这样吗?
答案 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