Computer Science 15-100, Fall 2008
Class Notes: Getting Started with Writing Classes
Getting Started with Writing Classes
// Mark's Foo Code (tests the Fraction class) // This code was developed in class. As such, it is // for demonstrational purposes only, and in particular // may be incomplete and may contain bugs or other oddities. class Foo { public static void main(String[] args) { Fraction f1 = new Fraction(1,2); System.out.println("f1 = " + f1.toString()); Fraction f2 = new Fraction(0,4); Fraction f3 = new Fraction(8); Fraction f4 = new Fraction(); System.out.println("f2 = " + f2); System.out.println(f1.add(f2)); System.out.println(f3 + " " + f4); } } // Mark's Fraction Code // This code was developed in class. As such, it is // for demonstrational purposes only, and in particular // may be incomplete and may contain bugs or other oddities. class Fraction { private int numerator; private int denominator; public Fraction(int numerator, int denominator) { int commonFactor = gcd(numerator, denominator); this.numerator = numerator/commonFactor; this.denominator = denominator/commonFactor; } public Fraction(int num) { numerator = num; denominator = 1; } public Fraction() { this(0,1); } public Fraction add(Fraction other) { int num = this.numerator * other.denominator + other.numerator * this.denominator; int denom = this.denominator * other.denominator; return new Fraction(num, denom); } public boolean equals(Fraction other) { return (this.numerator == other.numerator && this.denominator == other.denominator); } public String toString() { return numerator + "/" + denominator; } private static int gcd(int x, int y) { int r; while (y > 0) { r = x % y; x = y; y = r; } return x; } }
// David's FractionDemo Code // This code was developed in class. As such, it is // for demonstrational purposes only, and in particular // may be incomplete and may contain bugs or other oddities. class FractionDemo { public static void main(String[] args) { Fraction x = new Fraction(4,6); System.out.println(x.toString()); System.out.println(x); // implicitly calls toString Fraction y = new Fraction(1,6); System.out.println(y); Fraction z = x.times(y); // like String System.out.println(x + " * " + y + " = " + z); x = new Fraction(2,3); y = new Fraction(4,3); z = x.plus(y); System.out.println(x + " + " + y + " = " + z); Fraction z2 = new Fraction(4,2); System.out.println(z + " equals " + z2 + " is " + z.equals(z2)); z2 = new Fraction(-4,-2); System.out.println(z + " equals " + z2 + " is " + z.equals(z2)); x = new Fraction(0,9); System.out.println(x); x = new Fraction(9,0); System.out.println(x); x = new Fraction(); System.out.println(x); } } // David's Fraction Code // This code was developed in class. As such, it is // for demonstrational purposes only, and in particular // may be incomplete and may contain bugs or other oddities. class Fraction { private int num, den; // Constructors public Fraction() { this.num = 0; this.den = 1; } public Fraction(int num, int den) { // handle the sign -- only the num can be negative if (den < 0) { den = -den; num = -num; } // and assign to the instance variables this.num = num; this.den = den; // reduce them int gcd = gcd(num, den); if (gcd > 0) { this.num /= gcd; this.den /= gcd; } } private static int gcd(int x, int y) { // Euclid: gcd(x, y) == gcd(y, x%y) // gcd(180, 24) = gcd(24, 12) // = gcd(12, 0) // gcd(24, 180) = gcd(180, 24).. x = Math.abs(x); y = Math.abs(y); if ((x == 0) || (y == 0)) return 0; while (y != 0) { int r = x % y; x = y; y = r; } return x; } // a/b * c/d = ac/bd public Fraction times(Fraction that) { int num = this.num * that.num; int den = this.den * that.den; return new Fraction(num, den); } // a/b + c/d // = a/b * d/d + c/d * b/b // = ad/bd + bc/bd // = (ad + bc)/bd public Fraction plus(Fraction that) { int num = this.num*that.den + that.num*this.den; int den = this.den*that.den; return new Fraction(num, den); } public String toString() { if (den == 0) return "NaF"; // Not A Fraction else if (num == 0) return "0"; else if (den == 1) return ("" + num); else return num + "/" + den; } public boolean equals(Fraction that) { return ((this.num == that.num) && (this.den == that.den)); } }
carpe diem - carpe diem - carpe diem - carpe diem - carpe diem - carpe diem - carpe diem - carpe diem - carpe diem