您的位置:首页 > 其它

有理数类Rational实例

2015-09-02 20:08 351 查看
public class Rational extends Number implements Comparable {
private long numerator=0;
private long denominator=1;
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)/gcd;
}
private static long gcd(long n,long d)
{
long n1=Math.abs(n);
long n2=Math.abs(d);
int gcd=1;
for(int k=1;k<=n1&&k<=n2;k++)
{
if(n1%k==0&&n2%k==0)
gcd=k;
}
return gcd;
}
public long getNumerator()
{
return numerator;
}
public long getDenominator()
{
return denominator;
}
public Rational add(Rational secondRational)
{
long n=numerator*secondRational.getDenominator()+denominator*secondRational.getNumerator();
long d=denominator*secondRational.getDenominator();
return new Rational(n,d);
}
public Rational subtract(Rational secondRational)
{
long n=numerator*secondRational.getDenominator()-denominator*secondRational.getNumerator();
long d=denominator*secondRational.getDenominator();
return new Rational(n,d);
}
public Rational multiply(Rational secondRational)
{
long n=numerator*secondRational.getNumerator();
long d=denominator*secondRational.getDenominator();
return new Rational(n,d);
}
public Rational divide(Rational secondRational)
{
long n=numerator*secondRational.getDenominator();
long d=denominator*secondRational.getNumerator();
return new Rational(n,d);
}
public String toString()
{
if(denominator==1)
{
return numerator+"";
}else
return numerator+"/"+denominator;
}
public boolean equals(Object parm1)
{
if((this.subtract((Rational)parm1)).getNumerator()==0)
return true;
else
return false;
}
@Override
public int compareTo(Object o) {
// TODO Auto-generated method stub
if((this.subtract((Rational)o)).getNumerator()>0)
return 1;
else if((this.subtract((Rational)o)).getNumerator()<0)
return -1;
else
return 0;
}

@Override
public int intValue() {
// TODO Auto-generated method stub
return (int)doubleValue();
}

@Override
public long longValue() {
// TODO Auto-generated method stub
return (long)doubleValue();
}

@Override
public float floatValue() {
// TODO Auto-generated method stub
return (float)doubleValue();
}

@Override
public double doubleValue() {
// TODO Auto-generated method stub
return 1.0*numerator/denominator;
}

}


public class TestRationalClass {

public static void main(String[] args)
{
Rational r1=new Rational(4,2);
Rational r2=new 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.multiply(r2));
System.out.println(r1+"/"+r2+"="+r1.divide(r2));
System.out.println(r2+" is "+r2.doubleValue());
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: