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