/* * Rational: A class that implements a rational number as * a fraction. */ public class Rational { /* instance variables */ private int numer; // numerator private int denom; // denominator /* private utility method for setting data */ private void set( int n, int d ) { numer = n; denom = d; } /* no-argument (default) Constructor */ public Rational( ) { set( 0, 1 ); } /* basic Constructor */ public Rational( int n, int d ) { set( n, d ); } /* construct from int */ public Rational( int n ) { set( n, 1 ); } /* copy Constructor */ public Rational( Rational r ) { if ( r == null ) { // cannot initialize from null! System.out.println( "Illegal construction from null reference" ); System.exit( 0 ); } set( r.numer, r.denom ); } /* convert to string */ public String toString( ) { String result = numer + "/" + denom + " ( " + doubleValue( ) + " )"; return result; } /* accessors */ public int getNumerator( ) { return numer; } public int getDenominator( ) { return denom; } public double doubleValue( ) { return ( double ) numer / ( double) denom; } public float floatValue( ) { return ( float ) numer / ( float ) denom; } /* mutators */ public void setNumerator( int n ) { numer = n; } public void setDenominator( int d ) { denom = d; } public void setValue( int v ) { set( v, 1 ); } /* equality comparison */ public static boolean equals( Rational q, Rational r ) { return q.numer * r.denom == r.numer * q.denom; } public boolean equals( Rational r ) { return equals ( this, r ); } public static boolean identical( Rational q, Rational r ) { return q.numer == r.numer && q.denom == r.denom; } /* reciprocal */ public static Rational reciprocal( Rational r ) { return new Rational( r.denom, r.numer ); } public void reciprocal( ) { set( denom, numer ); } /* multiplication (static and mutator) */ public static Rational multiply( Rational q, Rational r ) { return new Rational( q.numer * r.numer, q.denom *r.denom ); } public void multiplyBy( Rational r ) { numer *= r.numer; denom *= r.denom; } }