15-100 Lecture 6 (Wednesday, January 30, 2008)

Files From Today's Class

Today's Example

In class today, we developed a simple example designed to reinforce what we already know about developing class specification in Java. It was the first time we overloaded a constructor and also the first time we made some use of some minor language features.

Fair Warning

Check the schedule. Notice an interesting event next week!

Notable Items

Today's Example

class Wallet {
  private String owner;
  private long amountInCents;

  public Wallet (String owner) {
    this.owner = owner;
    this.amountInCents = 0l;
  }

  public Wallet (String owner, long amountInCents) {
    this.owner = owner;
    this.amountInCents = amountInCents;
  }

  public String getOwner() {
    return owner;
  }

  public long getAmount() {
    return amountInCents;
  }

  public void addMoney(long cents) {
    amountInCents += cents;
  }

  public boolean removeMoney (long cents) {
    if (amountInCents < cents)
      return false;
    
    amountInCents -= cents;
 
    return true;
  }


  public boolean isFatter (Wallet w) {
    if (amountInCents > w.amountInCents)
      return true;

    return false;
  }

  public String toString() { 
    return owner + ": $" + (amountInCents / 100) + "." + (amountInCents % 100);    
  }


  public boolean equals(Object o) { 
    Wallet w = (Wallet) o;
    
    if (!owner.equals(w.owner))
      return false;

    if (amountInCents != w.amountInCents)
      return false;

    return true;
  }


  public static void main(String[] args) {
    Wallet gregsWallet = new Wallet ("Gregory Kesden");
    System.out.println (gregsWallet);

    Wallet forbesWallet = new Wallet ("Steve Forbes", 100); // One dollar
    System.out.println (forbesWallet);

    System.out.println (forbesWallet.getOwner() + ": $" +
                        (forbesWallet.getAmount() / 100) + "." +
                        (forbesWallet.getAmount() % 100));

    forbesWallet.addMoney (150);
    System.out.println (forbesWallet);
    System.out.println (gregsWallet);

    if (forbesWallet.removeMoney(250))
      System.out.println ("Expected success removing from Forbes Wallet.");
    else
      System.out.println ("Unxpected failure removing from Forbes Wallet.");

    if (!forbesWallet.removeMoney(1)) // Notice the !, remember, think NOT
      System.out.println ("Expected failure removing from Forbes Wallet.");
    else
      System.out.println ("Unxpected success removing from Forbes Wallet.");


    // Test one way
    if (!forbesWallet.isFatter(gregsWallet)) 
      System.out.println ("Expected: forbeswallet NOT fatter than gregswallet.");
    else
      System.out.println ("Unxpected: forbeswallet fatter than gregswallet");

    // Test symmetric way
    if (!gregsWallet.isFatter(forbesWallet)) 
      System.out.println ("Expected: forbeswallet fatter than gregswallet.");
    else
      System.out.println ("Unxpected: forbeswallet NOT fatter than gregswallet");

    // Test equal (not one greater tha the other) case
    forbesWallet.removeMoney(250);
    if (!gregsWallet.isFatter(forbesWallet)) 
      System.out.println ("Expected: gregswallet NOT fatter than forbeswallet.");
    else
      System.out.println ("Unxpected: gregswallet fatter than forbeswallet");

    if (!forbesWallet.isFatter(forbesWallet)) 
      System.out.println ("Expected: forbeswallet fatter than gregswallet.");
    else
      System.out.println ("Unxpected: forbeswallet NOT fatter than gregswallet");


  }
}