/** * Class for rational numbers (fractions). * @author B. L. Massingill. * @see Source code */ public class RationalNumber { /* Instance variables. Every object gets one of each of these. * (Notice that this is not a documentation comment; people using * this class don't need to read it.) */ private int numer; private int denom; /** * Constructs a rational number with specified numerator, denominator. * @param n numerator * @param d denominator */ public RationalNumber(int n, int d) { numer = n; denom = d; } /** * Converts a rational number to printable form. * @return printable representation of number ( numerator / denominator). */ public String toString() { return Integer.toString(numer) + " / " + Integer.toString(denom); } /** * Compares two rational numbers for equality. (This is not a very * Java-esque function; the instance method equals() below is usually * preferred.) * @param n1 * @param n2 * @return true if n1 and n2 are equal, false if not */ public static boolean isEqual(RationalNumber n1, RationalNumber n2) { /* the long version, perhaps more readable for beginners */ int temp1 = n1.numer * n2.denom; int temp2 = n2.numer * n1.denom; if (temp1 == temp2) return true; else return false; /* the short version, same result */ /* return (n1.numer * n2.denom) == (n2.numer * n1.denom); */ } /** * Compares two rational numbers for equality. * @param n * @return true if current object and n are equal, false if not */ public boolean equals(RationalNumber n) { int temp1 = numer * n.denom; int temp2 = n.numer * denom; if (temp1 == temp2) return true; else return false; /* the short version, same result */ /* return (numer * n.denom) == (denom * n.numer); */ } /** * Multiplies two rational numbers. (Again, it would probably be more * Java-esque to make this an instance method.) * @param n1 * @param n2 * @return n1 times n2 */ public static RationalNumber multiply(RationalNumber n1, RationalNumber n2) { RationalNumber newNum = new RationalNumber(n1.numer * n2.numer, n1.denom * n2.denom); return newNum; /* shorter version, same result */ /*return new RationalNumber(n1.numer * n2.numer, n1.denom * n2.denom);*/ } /** * Main method showing example uses of methods. * @param args command-line arguments, unused */ public static void main(String[] args) { RationalNumber n1 = new RationalNumber(5, 1); RationalNumber n2 = new RationalNumber(5, 2); System.out.println("n1 = " + n1.toString()); System.out.println("n2 = " + n2.toString()); if (isEqual(n1, n1)) System.out.println("n1, n1 equal"); else System.out.println("n1, n1 not equal"); if (isEqual(n1, n2)) System.out.println("n1, n2 equal"); else System.out.println("n1, n2 not equal"); n2 = new RationalNumber(10, 2); System.out.println("n2 = " + n2.toString()); if (isEqual(n1, n2)) System.out.println("n1, n2 equal"); else System.out.println("n1, n2 not equal"); if (n1.equals(n2)) System.out.println("n1, n2 equal (using equals() function)"); else System.out.println("n1, n2 not equal (using equals() function)"); RationalNumber n = multiply(n2, n2); System.out.println("n2 * n2 = " + n); } }