java 分数计算

java 分数计算
     本代码设计了一个分数类,Fraction,提供方法进行加减乘除计算,并能按最简输出。    
     
[java]  view plain copy
  1. public class TestFraction  
  2. {  
  3.     public static void main(String[] args)  
  4.         {  
  5.         // TODO Auto-generated method stub  
  6.             Fraction f1=new Fraction(14,21);      
  7.             Fraction f2=new Fraction(20,-30);  
  8.             Fraction f3;  
  9.         f3=f1.plus(f2);  
  10.             System.out.println(f1+"+ "+f2+"= "+f3);  
  11.         f3=f1.minus(f2);  
  12.             System.out.println(f1+"- "+f2+"= "+f3);  
  13.         f3=f1.multiply(f2);  
  14.             System.out.println(f1+"* "+f2+"= "+f3);  
  15.         f3=f1.divide(f2);  
  16.             System.out.println(f1+"/ "+f2+"= "+f3);  
  17.         }  
  18. }  
  19. class Fraction  
  20. {  
  21.     private int c;  
  22.     private int d;  
  23.   
  24.     public Fraction()                   //默认构造函数,分子分母都为1。  
  25.     {  
  26.         c=1;  
  27.         d=1;  
  28.     }  
  29.     public Fraction(int a,int b)                //带参数构造函数,判断分母是否为0。  
  30.     {  
  31.         if(b==0)  
  32.         {  
  33.             System.out.println("分母 不能为0!");  
  34.             System.exit(0);  
  35.         }  
  36.         c=a;  
  37.         d=b;  
  38.         selfTrim();  
  39.     }  
  40.   
  41.     public int getNumerator()  
  42.     {  
  43.         return c;  
  44.     }  
  45.     public int getDinominator()  
  46.     {  
  47.         return d;  
  48.     }  
  49.   
  50.     public void selfTrim()  
  51.     {  
  52.         int maxCommon=commonDivisor(c,d);       //求出两个数的最大公约数。  
  53.         c=c/maxCommon;                  //分式为最简。  
  54.         d=d/maxCommon;  
  55.         //整理正负号。  
  56.         if((c>0&&d<0)||(c<0&&d<0))  
  57.         {  
  58.             c=-c;  
  59.             d=-d;  
  60.         }  
  61.     }  
  62.   
  63.     public String toString()                        //重写tostring().  
  64.     {  
  65.         if(c==0||d==1)                          //分母为1 直接输出分子.  
  66.         {  
  67.             return Integer.toString(c);  
  68.         }  
  69.         return Integer.toString(c)+"/"+Integer.toString(d);     //输出c/d.  
  70.     }  
  71.     //----- plus  
  72.     public Fraction minus(Fraction f2)  
  73.     {  
  74.         int newNumerator=c*f2.getDinominator()-d*f2.getNumerator();  
  75.         int newDinominator=d*f2.getDinominator();  
  76.   
  77.         int maxCommon=commonDivisor(newNumerator,newDinominator);  
  78.         return new Fraction(newNumerator/maxCommon,newDinominator/maxCommon);  
  79.     }  
  80.     //---- minus  
  81.     public Fraction plus(Fraction f2)  
  82.     {  
  83.         int newNumerator=c*f2.getDinominator()+d*f2.getNumerator();  
  84.         int newDinominator=d*f2.getDinominator();  
  85.   
  86.         int maxCommon=commonDivisor(newNumerator,newDinominator);  
  87.         return new Fraction(newNumerator/maxCommon,newDinominator/maxCommon);  
  88.     }  
  89.     //----- mutiply  
  90.     public  Fraction multiply(Fraction f2)                  //两个分数相乘。  
  91.     {  
  92.         int newNumerator=c*f2.getNumerator();  
  93.         int newDinominator=d*f2.getDinominator();  
  94.   
  95.         int maxCommon=commonDivisor(newNumerator,newDinominator);  
  96.         return new Fraction(newNumerator/maxCommon,newDinominator/maxCommon);  
  97.     }  
  98.       
  99.     //-----  divide  
  100.     public Fraction divide(Fraction f2)  
  101.     {  
  102.         if(f2.getNumerator()==0)  
  103.         {  
  104.             System.out.println("0不能做除数!");  
  105.             System.exit(0);  
  106.         }  
  107.         Fraction result=new Fraction();  
  108.         int newNumerator=c*f2.getDinominator();  
  109.         int newDinominator=d*f2.getNumerator();  
  110.   
  111.         int maxCommon=commonDivisor(newNumerator,newDinominator);  
  112.         return new Fraction(newNumerator/maxCommon,newDinominator/maxCommon);  
  113.     }  
  114.   
  115.     //计算2个数的最大公约数。按绝对值计算。  
  116.     public static  int commonDivisor(int x,int y)       //计算2个数的最大公约数。按绝对值计算。  
  117.     {  
  118.         if(x==0||y==0)  
  119.         {  
  120.             return 1;  
  121.         }  
  122.         int x1;               
  123.         int y1;  
  124.   
  125.         x1=(Math.abs(x)>Math.abs(y))?Math.abs(x):Math.abs(y);                //使x1>y1.  
  126.         y1=(Math.abs(x)>Math.abs(y))?Math.abs(y):Math.abs(x);  
  127.         int z=1;  
  128.             while(z!=0)   
  129.             {  
  130.             z=x1%y1;  
  131.                 x1=y1;  
  132.                 y1=z;  
  133.             }   
  134.         return x1;  
  135.     }  
  136. }  

你可能感兴趣的:(java)