public class Rational { private int num, den; private int gcd(int a, int b) { if (b == 0) return a; return gcd(b, a % b); } public Rational(int num, int den) { int d = gcd(num, den); this.num = num / d; this.den = den / d; } /* * @param r a Rational * @return another Rational that's the result of adding r to the current Rational */ public Rational add(Rational r) { int resultNum = r.num * den + num * r.den; int resultDen = r.den * den; return new Rational(resultNum, resultDen); } /* * @param r a Rational * @return another Rational that's the result of multiplying r to the current Rational */ public Rational multiply(Rational r) { int resultNum = r.num * num; int resultDen = r.den * den; return new Rational(resultNum, resultDen); } public String toString() { return String.format("%d/%d", num, den); } public boolean equals(Rational r) { return num==r.num && den==r.den; } public static void main(String[] args) { Rational r1 = new Rational(3, 4); Rational r2 = new Rational(2, 4); Rational r3 = new Rational(1, 3); Rational result = r1.add(r2).multiply(r3); System.out.printf("(%s + %s) * %s = %s%n", r1, r2, r3, result); Rational r4 = new Rational(1, 2); if (r2.equals(r4)) System.out.println("r2 is equal to r4"); } }