zoukankan      html  css  js  c++  java
  • Java 有理数类 分数类 Rational类的设计与实现

    要实现Rational类的加减乘除,要实现其可比较性,要覆盖toString()方法,要实现不同数据类型的转换等。

      1 package chapter14;
      2 
      3 public class Rational extends Number implements Comparable {
      4     private long numerator=0;
      5     private long denominator=1;
      6     
      7     public Rational(){
      8         this(0,1);
      9     }
     10     public Rational(long numerator, long denominator) {
     11         // TODO Auto-generated constructor stub
     12         long gcd=gcd(numerator,denominator);
     13         this.numerator=((denominator>0)?1:-1)*numerator/gcd;
     14         this.denominator=Math.abs(denominator)/gcd;
     15     }
     16 
     17     private static long gcd(long n, long d) {
     18         // TODO Auto-generated method stub
     19         long n1=Math.abs(n);
     20         long n2=Math.abs(d);
     21         int gcd=1;
     22         
     23         for(int k=1;k<=n1&&k<=n2;k++){
     24             if(n1%k==0&&n2%k==0)
     25                 gcd=k;
     26         }
     27         return gcd;
     28     }
     29     
     30     public long getNumerator(){
     31         return numerator;
     32     }
     33     public long getDenominator(){
     34         return denominator;
     35     }
     36     
     37     public Rational add(Rational secondRational){
     38         long n=numerator*secondRational.getDenominator()+
     39                 denominator*secondRational.getNumerator();
     40         long d=denominator*secondRational.getDenominator();
     41         return new Rational(n,d);
     42     }
     43     
     44     public Rational subtract(Rational secondRational){
     45         long n=numerator*secondRational.getDenominator()-
     46                 denominator*secondRational.getNumerator();
     47         long d=denominator*secondRational.getDenominator();
     48         return new Rational(n,d);
     49     }
     50     
     51     public Rational multiply(Rational sR){
     52         long n=numerator*sR.getNumerator();
     53         long d=denominator*sR.getDenominator();
     54         return new Rational(n,d);
     55     }
     56     
     57     public Rational divide(Rational sR){
     58         long n=numerator*sR.denominator;
     59         long d=denominator*sR.numerator;
     60         return new Rational(n,d);
     61     }
     62     
     63     public String toString(){
     64         if(denominator==1)
     65             return numerator+"";
     66         else
     67             return numerator+"/"+denominator;
     68     }
     69     
     70     public boolean equals(Object parm1){
     71         if((this.subtract((Rational)(parm1))).getNumerator()==0)
     72             return true;
     73         else 
     74             return false;
     75     }
     76     
     77     
     78     
     79     @Override
     80     public int compareTo(Object o) {
     81         // TODO Auto-generated method stub
     82         if((this.subtract((Rational)o)).getNumerator()>0)
     83                 return 1;
     84         else if((this.subtract((Rational)o)).getNumerator()<0)
     85             return -1;
     86         else
     87             return 0;
     88     }
     89 
     90     @Override
     91     public int intValue() {
     92         // TODO Auto-generated method stub
     93         return (int)doubleValue();
     94     }
     95 
     96     @Override
     97     public long longValue() {
     98         // TODO Auto-generated method stub
     99         return (long)doubleValue();
    100     }
    101 
    102     @Override
    103     public float floatValue() {
    104         // TODO Auto-generated method stub
    105         return (float)doubleValue();
    106     }
    107 
    108     @Override
    109     public double doubleValue() {
    110         // TODO Auto-generated method stub
    111         return numerator*1.0/denominator;
    112     }
    113 
    114 
    115     
    116 
    117 }

      有理数封装在Rational对象中。在机器内部,有理数总表示为它的最简形式,分子决定有理数的符号,分母总为正数。

      gcd()方法是私有静态的。

      Object类中的toString方法和equals方法在Rational类中被覆盖。toString()方法以numerator/denominator的形式返回一个Rational对象的字符串表示。

      

  • 相关阅读:
    Unique Binary Search Trees 解答
    Unique Paths II 解答
    Unique Paths 解答
    Maximum Subarray 解答
    Climbing Stairs 解答
    House Robber II 解答
    House Robber 解答
    Valid Palindrome 解答
    Container With Most Water 解答
    Remove Duplicates from Sorted List II 解答
  • 原文地址:https://www.cnblogs.com/xingzhui/p/5720875.html
Copyright © 2011-2022 走看看