public class Rational {
// Creating instance variables for the numerator and denominator
private long numerator;
private long denominator;
// Constructor that creates a new Rational object, making sure the denominator is not 0 or negative.
public Rational (long numer, long denom){
if (denom == 0){
throw new RuntimeException("Error, can't have a denominator of 0.");
}
if (denom <0){
denom = -denom;
numer = -numer;
}
long greatestCommonDivisor = gcd(numer, denom);
numerator = numer / greatestCommonDivisor;
denominator = denom / greatestCommonDivisor;
}
// This method takes two rational numbers and adds them together
public Rational plus(Rational b){
Rational answer = new Rational (this.numerator * b.denominator + b.numerator * this.denominator, b.denominator * this.denominator);
return answer;
}
//This method takes two rational numbers and subtracts them
public Rational minus (Rational b){
Rational answer = new Rational (this.numerator * b.denominator - b.numerator * this.denominator, b.denominator * this.denominator);
return answer;
}
//This method takes two rational numbers and multiplies them
public Rational times (Rational b){
Rational answer = new Rational (this.numerator * b.numerator, this.denominator * b.denominator);
return answer;
}
// This method uses Euclid's algorithm which calculates the greatest common divisor
public static long gcd(long p, long q){
if (q==0) return p;
long r = p % q;
return gcd(q, r);
}
// This method produces a string representation of values
public String toString(){
if (denominator == 1)
return numerator + "";
else
return numerator + "/" + denominator;
}
// Test client
public static void main (String args[]){
Rational p = new Rational (1, 6);
Rational q = new Rational (4, 8);
Rational r = p.minus(q);
System.out.println(r);
}
}