Class
Expand|Select|Wrap|Line Numbers
- //********************************************************************
- // Rational.java Author: Ali
- // Represents one rational number with a numerator and denominator.
- //********************************************************************
- public class Rational implements Comparable
- {
- private int numerator, denominator;
- //-----------------------------------------------------------------
- // Sets up the rational number by ensuring a nonzero denominator
- // and making only the numerator signed.
- //-----------------------------------------------------------------
- public Rational (int numer, int denom)
- {
- if (denom == 0)
- denom = 1;
- // Make the numerator "store" the sign
- if (denom < 0)
- {
- numer = numer * -1;
- denom = denom * -1;
- }
- numerator = numer;
- denominator = denom;
- reduce();
- }
- //-----------------------------------------------------------------
- // Returns the numerator of this rational number.
- //-----------------------------------------------------------------
- public int getNumerator ()
- {
- return numerator;
- }
- //-----------------------------------------------------------------
- // Returns the denominator of this rational number.
- //-----------------------------------------------------------------
- public int getDenominator ()
- {
- return denominator;
- }
- //-----------------------------------------------------------------
- // Returns the reciprocal of this rational number.
- //-----------------------------------------------------------------
- public Rational reciprocal ()
- {
- return new Rational (denominator, numerator);
- }
- //-----------------------------------------------------------------
- // Adds this rational number to the one passed as a parameter.
- // A common denominator is found by multiplying the individual
- // denominators.
- //-----------------------------------------------------------------
- public Rational add (Rational op2)
- {
- int commonDenominator = denominator * op2.getDenominator();
- int numerator1 = numerator * op2.getDenominator();
- int numerator2 = op2.getNumerator() * denominator;
- int sum = numerator1 + numerator2;
- return new Rational (sum, commonDenominator);
- }
- //-----------------------------------------------------------------
- // Subtracts the rational number passed as a parameter from this
- // rational number.
- //-----------------------------------------------------------------
- public Rational subtract (Rational op2)
- {
- int commonDenominator = denominator * op2.getDenominator();
- int numerator1 = numerator * op2.getDenominator();
- int numerator2 = op2.getNumerator() * denominator;
- int difference = numerator1 - numerator2;
- return new Rational (difference, commonDenominator);
- }
- //-----------------------------------------------------------------
- // Multiplies this rational number by the one passed as a
- // parameter.
- //-----------------------------------------------------------------
- public Rational multiply (Rational op2)
- {
- int numer = numerator * op2.getNumerator();
- int denom = denominator * op2.getDenominator();
- return new Rational (numer, denom);
- }
- //-----------------------------------------------------------------
- // Divides this rational number by the one passed as a parameter
- // by multiplying by the reciprocal of the second rational.
- //-----------------------------------------------------------------
- public Rational divide (Rational op2)
- {
- return multiply (op2.reciprocal());
- }
- //-----------------------------------------------------------------
- // Determines if this rational number is equal to the one passed
- // as a parameter. Assumes they are both reduced.
- //-----------------------------------------------------------------
- public boolean equals (Rational op2)
- {
- return ( numerator == op2.getNumerator() &&
- denominator == op2.getDenominator() );
- }
- //-----------------------------------------------------------------
- // Returns this rational number as a string.
- //-----------------------------------------------------------------
- public String toString ()
- {
- String result;
- if (numerator == 0)
- result = "0";
- else
- if (denominator == 1)
- result = numerator + "";
- else
- result = numerator + "/" + denominator;
- return result;
- }
- //-----------------------------------------------------------------
- // Reduces this rational number by dividing both the numerator
- // and the denominator by their greatest common divisor.
- //-----------------------------------------------------------------
- private void reduce ()
- {
- if (numerator != 0)
- {
- int common = gcd (Math.abs(numerator), denominator);
- numerator = numerator / common;
- denominator = denominator / common;
- }
- }
- //-----------------------------------------------------------------
- // Computes and returns the greatest common divisor of the two
- // positive parameters. Uses Euclid's algorithm.
- //-----------------------------------------------------------------
- private int gcd (int num1, int num2)
- {
- while (num1 != num2)
- if (num1 > num2)
- num1 = num1 - num2;
- else
- num2 = num2 - num1;
- return num1;
- }
- public int compareTo(Object op2)
- {
- Rational input = (Rational) op2;
- double returnValue2 = numerator/denominator;
- double r1 = input.getNumerator();
- double r2 = input.getDenominator();
- double r3 =r1/r2;
- double diff = returnValue2-r3;
- if(diff>0)
- return 1;
- else if(diff<0)
- return -1;
- else if(diff == 0)
- return 0;
- else
- return 5;
- }
- }
Expand|Select|Wrap|Line Numbers
- /**
- * @(#)RationDriver.java
- *
- *
- * @author
- * @version 1.00 2008/11/19
- */
- public class RationDriver {
- public static void main(String[] args) {
- Rational first = new Rational(2,4);
- Rational sec = new Rational(1,2);
- int result;
- result = first.compareTo(sec);
- if(result >0)
- System.out.println("The first fraction is greater");
- else if(result < 0)
- System.out.println("The first fraction is smaller");
- else if(result ==0)
- System.out.println("The 2 are equal");
- }
- }