我用java编写Rational类来做基本的数学运算,我想覆盖Number类和Comparable接口的方法。我这样做是为了双倍的价值
正如我们所知,BigInteger类也扩展了数字类,所以我对在doubleValue中调用哪个方法感到困惑,因为我已经覆盖了doubleValue
import java.math.BigInteger;
class Rational extends Number implements Comparable<Rational>{
// Data fields for numerator and denominator
private BigInteger numerator = BigInteger.ZERO;
private BigInteger denominator = BigInteger.ONE;
// Construct a rational with default properties
Rational(){
numerator = BigInteger.ZERO;
denominator = BigInteger.ONE;
}
Rational(BigInteger numerator,BigInteger denominator){
BigInteger gcde = numerator.gcd(denominator);
BigInteger temp = BigInteger.valueOf( (long)(denominator.compareTo(BigInteger.ZERO)) );
this.numerator = temp.multiply(numerator.divide(gcde));
this.denominator = (denominator.abs()).divide(gcde);
}
// subtract a rational number to this rational a/b - r.a/r.b = a*r.b - r.a*b/r.b*b
public Rational subtract(Rational r){
BigInteger n = (numerator.multiply(r.getDenominator())).subtract(denominator.multiply(r.getNumerator()));
BigInteger d = denominator.multiply(r.getDenominator());
return new Rational(n,d);
}
// Return numerator
public BigInteger getNumerator(){
return numerator;
}
// Return denominator
public BigInteger getDenominator(){
return denominator;
}
@Override // Implement the abstract doubleValue method in Number
public double doubleValue(){
return numerator.doubleValue()/denominator.doubleValue();
}
@Override // Implement the abstract longValue method in Number
public long longValue(){
return (long)doubleValue();
}
@Override
public int compareTo(Rational r){
return (this.subtract(r).getNumerator()).compareTo(BigInteger.ZERO);
}
}
public double doubleValue(){
return numerator.doubleValue()/denominator.doubleValue();
}
分子
是一个 BigInteger,因此调用 BigInteger.doubleValue()。
与
分母
相同。你的类也恰好有一个doubleValue()
函数并不重要。分子
和分母
与 Rational
类是不同的类。
Number / \ BigInteger Rational | | doubleValue doubleValue
问题内容: 我正在使用REPL用Scala数组调用Java vararg方法。 如果执行此操作,则会出现错误: 但是,如果我这样做,那就行得通: 我的问题是怎么办?Scala API在哪里定义? 问题答案: 添加告诉编译器将数组视为varargs。Scala与Java的工作原理相同。如果我有方法 我可以这样称呼它: 但是,如果我想向其传递实际的序列(与一样),我会这样做:
问题内容: 我阅读的所有资料都提到了几个案例,并以“其他一些案例”作了总结。在视图/活动中调用onSaveInstanceState方法时,所有情况是什么? 问题答案: 该文档称 在活动被杀死之前将调用此方法,以便将来在将来返回某个时间时可以恢复其状态。
这三个方法包含相同的参数,所以不应该重载。它们都有执行不同功能的代码。这怎么可能?java如何知道调用哪个方法?在命令行中通过java jar命令执行此代码时,我没有得到任何错误。
问题内容: 该功能运行什么?它只会运行吗? 问题答案: setState()将按以下顺序运行函数: 如果您的组件正在接收道具,它将使用上述功能运行该功能。
问题内容: 我有两个Java类:B,它扩展了另一个类A,如下所示: 我想打电话给。我来自C++界,我不知道如何用Java做这个基本的事情。 问题答案: 您要寻找的关键字是。例如,请参阅本指南。