一本书上的例子 (小弟初学),废话不多上程序(注释就去了 减少空间)
public class Rational extends Number implements Comparable{
private long numerator = 0;
private long denominator =0;
public Rational(){
this(0,1);
}
public Rational(long numerator ,long denominator){
long gcd = gcd(numerator,denominator);
this.numerator = ((denominator>0)?1 : -1)*numerator / gcd;
this.denominator = Math.abs(denominator);
}
private static long gcd(long n,long d){
long n1 = Math.abs(n);
long d1 = Math.abs(d);
int gcd = 1;
for(int k=1;k<=n1&&k<=d1;k++){
if(n1%k == 0&&d1%k == 0)
gcd = k;
}
return gcd;
}
public long getNumerator(){
return numerator;
}
public long getDenominator(){
return denominator;
}
public Rational Add(Rational secondRational){
long n = this.numerator * secondRational.getDenominator() +
this.denominator * secondRational.getNumerator();
long d = this.denominator * secondRational.getDenominator();
return new Rational(n,d);
}
public Rational subtract(Rational secondRational){
long n = this.numerator * secondRational.getDenominator() -
this.denominator * secondRational.getNumerator();
long d = this.denominator * secondRational.getDenominator();
return new Rational(n,d);
}
public Rational multipy(Rational secondRational){
long n = this.numerator * secondRational.getNumerator();
long d = this.denominator * secondRational.getDenominator();
return new Rational(n,d);
}
public Rational divide(Rational secondRational){
long n = this.numerator * secondRational.getDenominator();
long d = this.denominator * secondRational.getDenominator();
return new Rational(n,d);
}
public String toString(){
if (this.denominator == 1)
return numerator + "";
else
return numerator + "/" +denominator;
}
public boolean equals(Object parml){
if((this.subtract((Rational)(parml))).getNumerator() ==0)
return true;
else
return false;
}
public int hashCode(){
return new Double(this.doubleValue()).hashCode();
}
public int intValue(){
return (int)doubleValue();
}
public float floatValue(){
return (float)doubleValue();
}
public double doubleValue(){
return numerator * 1.0 / denominator;
}
public long longValue(){
return (long)doubleValue();
}
public int compareTo(Object o){
if((this.subtract((Rational)o)).getNumerator()>0)
return 1;
else if ((this.subtract((Rational)o)).getNumerator()<0)
return -1;
else
return 0;
}
}
public class TestRational { public static void main(String[] args) {
Rational r1 = Rational(4,2);//这里Eclipse报错了,不明白
Rational r2 = Rational(2,3);
System.out.println(r1 + "+" + r2+"="+ r1.Add(r2));
System.out.println(r1 + "-" + r2+"="+ r1.subtract(r2));
System.out.println(r1 + "*" + r2+"="+ r1.multipy(r2));
System.out.println(r1 + "%" + r2+"="+ r1.divide(r2));
System.out.println(r2 + "is"+ r2.doubleValue());
}}
public class Rational extends Number implements Comparable{
private long numerator = 0;
private long denominator =0;
public Rational(){
this(0,1);
}
public Rational(long numerator ,long denominator){
long gcd = gcd(numerator,denominator);
this.numerator = ((denominator>0)?1 : -1)*numerator / gcd;
this.denominator = Math.abs(denominator);
}
private static long gcd(long n,long d){
long n1 = Math.abs(n);
long d1 = Math.abs(d);
int gcd = 1;
for(int k=1;k<=n1&&k<=d1;k++){
if(n1%k == 0&&d1%k == 0)
gcd = k;
}
return gcd;
}
public long getNumerator(){
return numerator;
}
public long getDenominator(){
return denominator;
}
public Rational Add(Rational secondRational){
long n = this.numerator * secondRational.getDenominator() +
this.denominator * secondRational.getNumerator();
long d = this.denominator * secondRational.getDenominator();
return new Rational(n,d);
}
public Rational subtract(Rational secondRational){
long n = this.numerator * secondRational.getDenominator() -
this.denominator * secondRational.getNumerator();
long d = this.denominator * secondRational.getDenominator();
return new Rational(n,d);
}
public Rational multipy(Rational secondRational){
long n = this.numerator * secondRational.getNumerator();
long d = this.denominator * secondRational.getDenominator();
return new Rational(n,d);
}
public Rational divide(Rational secondRational){
long n = this.numerator * secondRational.getDenominator();
long d = this.denominator * secondRational.getDenominator();
return new Rational(n,d);
}
public String toString(){
if (this.denominator == 1)
return numerator + "";
else
return numerator + "/" +denominator;
}
public boolean equals(Object parml){
if((this.subtract((Rational)(parml))).getNumerator() ==0)
return true;
else
return false;
}
public int hashCode(){
return new Double(this.doubleValue()).hashCode();
}
public int intValue(){
return (int)doubleValue();
}
public float floatValue(){
return (float)doubleValue();
}
public double doubleValue(){
return numerator * 1.0 / denominator;
}
public long longValue(){
return (long)doubleValue();
}
public int compareTo(Object o){
if((this.subtract((Rational)o)).getNumerator()>0)
return 1;
else if ((this.subtract((Rational)o)).getNumerator()<0)
return -1;
else
return 0;
}
}
public class TestRational { public static void main(String[] args) {
Rational r1 = Rational(4,2);//这里Eclipse报错了,不明白
Rational r2 = Rational(2,3);
System.out.println(r1 + "+" + r2+"="+ r1.Add(r2));
System.out.println(r1 + "-" + r2+"="+ r1.subtract(r2));
System.out.println(r1 + "*" + r2+"="+ r1.multipy(r2));
System.out.println(r1 + "%" + r2+"="+ r1.divide(r2));
System.out.println(r2 + "is"+ r2.doubleValue());
}}
public String toString() 返回该对象的字符串表示。通常,toString 方法会返回一个“以文本方式表示”此对象的字符串。结果应是一个简明但易于读懂的信息表达式。建议所有子类都重写此方法。(按照自己的需求来重写)
Object 类的 toString 方法返回一个字符串,该字符串由类名(对象是该类的一个实例)、at 标记符“@”和此对象哈希码的无符号十六进制表示组成。换句话说,该方法返回一个字符串,它的值等于: getClass().getName() + '@' + Integer.toHexString(hashCode()) 返回:
该对象的字符串表示形式。当你执行System.out.println(r1);时,会自动调用System.out.println(r1.toString());
那个当你进行如 System.out.println(r1); 时调用