一本书上的例子 (小弟初学),废话不多上程序(注释就去了 减少空间)
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());
}}

解决方案 »

  1.   

    Rational r1 = new Rational(4,2)
      

  2.   

    晕 竟然犯低级错误了   别见笑啊 还有个人问题  就是toRtring()方法 是怎么被调用的啊?对这点我不是很明白。
      

  3.   

    toStringtoString是Object对象的方法
    public String toString()    返回该对象的字符串表示。通常,toString 方法会返回一个“以文本方式表示”此对象的字符串。结果应是一个简明但易于读懂的信息表达式。建议所有子类都重写此方法。(按照自己的需求来重写)
        Object 类的 toString 方法返回一个字符串,该字符串由类名(对象是该类的一个实例)、at 标记符“@”和此对象哈希码的无符号十六进制表示组成。换句话说,该方法返回一个字符串,它的值等于:        getClass().getName() + '@' + Integer.toHexString(hashCode())    返回:
            该对象的字符串表示形式。当你执行System.out.println(r1);时,会自动调用System.out.println(r1.toString());
      

  4.   

    你说的是 toString()么?
    那个当你进行如 System.out.println(r1); 时调用