protected static Rational average(Rational r1, Rational r2) { long d1 = r1.getDenominator(); long d2 = r2.getDenominator(); Rational f1 = new Rational(r1.getNumerator() * d2, r1.getDenominator() * d2); Rational f2 = new Rational(r2.getNumerator() * d1, r2.getDenominator() * d1); return new Rational((f1.getNumerator() + f2.getNumerator()) / 2, f1.getDenominator()); }
@Override // Comparison between the 2 objects // Cross multiplies the rationals and checks the numerator and denominator values public int compare(Rational o1, Rational o2) { int lhs = o1.getNumerator() * o2.getDenominator(); int rhs = o1.getDenominator() * o2.getNumerator(); if (lhs < rhs) return -1; // rhs is greater than lhs --> r is less than current Rational else if (lhs > rhs) return 1; // lhs is greater than rhs --> r is greater than current Rational else return 0; // lhs and rhs are both equal --> Rationals are equal }
public static void main(String args[]) { Rational zero = new Rational(), half = new Rational(1, 2), halfCopy = new Rational(half); zero.setNumerator(1); zero.setDenominator(3); System.out.println("zero's numerator: " + zero.getNumerator()); System.out.println("zero's denominator: " + zero.getDenominator()); halfCopy.addWith(half); System.out.println("halfCopy:" + halfCopy); }