⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fraction.java

📁 书籍《JAVA面向对象程序设计》书籍的课后源代码。相信对很多人都有帮助
💻 JAVA
字号:
///////   Fraction.java   ///////
package myrmi.fra;

import java.io.Serializable;

// serrializable fractions

public class Fraction implements Serializable
{  
    public Fraction() { }  // default constructor
    // constructor, d is not zero
    public String toString()   // override
    {   return(num + "/" + denom); 
    }

    public boolean equals(Fraction y)  // fraction equality
    {    return( num == y.num && denom == y.denom );
    }

// The following equals method explained in chapter 4

    public boolean equals(Object y)   // override
    {   return ( y == this ||
                 (this.getClass() == y.getClass()
                  && num == ((Fraction)y).num
                  && denom == ((Fraction)y).denom )
               );
    }

    public boolean is_zero() { return(denom == 1 && num == 0); }
    public boolean is_one()  { return(denom == 1 && num == 1); }
    public boolean is_int()  { return denom==1; }


    public static int gcd(int a, int b)
    {       a = Math.abs(a);
            b = Math.abs(b);
            if ( a == 0 ) return b;     // 0 is error value
            if ( b == 0 ) return a;
            int t;
            while ( b > 0 )
            {   t = a % b;
                a = b;
                b = t;
            }
            return (a);
    }

    public Fraction(int n, int d)   // d is not zero
    {     int g;
          if ( d == 0 )
          {   System.err.println(
                "Fraction: fraction with 0 denominator?");
              System.exit(1);
          }
          if (n == 0) 
          {   num = 0;
              denom = 1;
              return;
          }
          if (d < 0) 
          {    n = -n;
               d = -d;
          }
          if ( (g = gcd(n,d)) != 1 )      // remove gcd
          {    n /= g;
               d /= g;
          }
          num = n;
          denom = d;
    }

    public boolean less(Fraction y)
    {    return( ( num * y.denom < denom * y.num ) ); }

    public boolean greater(Fraction y)
    {    return( ( num * y.denom > denom * y.num ) ); }

    public boolean greater_eq(Fraction y)
    {    return( ( num * y.denom >= denom * y.num ) ); }

    public boolean less_eq(Fraction y)
    {    return( ( num * y.denom <= denom * y.num ) ); }

    public int floor()
    {   if ( num >= 0 ) return( num % denom );
        else return(-1 - (-num % denom));
    }

    public int ceiling()
    {   if ( num >= 0 ) return(1 + (num % denom));
        else return ( 1 - (-num % denom) );
    }

    public Fraction divide(Fraction y)
    {    return new Fraction( num * y.denom, denom * y.num ); }

    public Fraction times(Fraction y)
    {    return new Fraction( num * y.num, denom * y.denom ); }

    public Fraction plus(Fraction y)
    {    if ( num == 0 )
             return makeFraction(y.num, y.denom);
         else if ( y.num == 0 )
             return makeFraction(num, denom);
         else
             return( new Fraction( num * y.denom + y.num * denom,
                                denom * y.denom ) );
    }

    public Fraction minus()
    {    return makeFraction(-num, denom);   }

    public Fraction minus(Fraction y)
    {    if ( num == 0 )           // trivial cases
              return makeFraction(-y.num, y.denom);
         else if ( y.num == 0 )
              return this;
         else                      // sub fractions
              return( new Fraction( num * y.denom - y.num * denom,
                                denom * y.denom ) );
    }

    private Fraction makeFraction(int n, int d)
    {     Fraction f = new Fraction();
          f.num = n;
          f.denom = d;
          return f;
    }
    // data members
    private int num;    // numerator
    private int denom;  // denominator
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -