ChengJade03.java

import java.util.NoSuchElementException;
import java.util.Scanner;

/**
 * This class repeatedly reads strings from the user and stores the strings into
 * the telephone directory. After each string is read and inserted, the
 * telephone directory is printed.
 *
 * @author     Cheng Jade
 * @assignment TA 3
 * @date       Sep 16, 2008
 * @bugs       None
 */
public class ChengJade03 {

  /**
   * The main entry point of the application.
   *
   * @param args The command line arguments (not used).
   */
  public static void main(final String[] args) {

    // Define a scanner that reads input from the user.
    final Scanner scanner = new Scanner(System.in);

    // Define a telephone directory.
    final TelephoneDirectory directory = new ArrayTelephoneDirectory();

    // Loop repeatedly until the directory is full.
    while (true) {

      // Print out the contents of the telephone directory.
      System.out.println(directory);

      // Ask the user to type a new item for the telephone directory.
      System.out.print("Type a name to add to the telephone directory: ");
      String item = null;

      // Read the string and check for errors.
      try {
        item = scanner.nextLine();

      } catch (final NoSuchElementException e) {
        System.err.println("No more tokens are available.");
        System.exit(1);

      } catch (final IllegalStateException e) {
        System.err.println("The scanner has closed.");
        System.exit(2);
      }

      // Add the item to the telephone directory and check for errors.
      try {
        directory.add(item);

      } catch (final DirectoryFullException e) {
        System.err.println(e.getMessage());
        System.exit(3);
      }
    }
  }
}

/**
 * An exception that indicates the user attempted to add an item to a telephone
 * directory when it was full.
 *
 * @author Cheng JadeYu
 * @assignment TA 3
 * @date Sep 16, 2008
 * @bugs None
 */
@SuppressWarnings("serial")
class DirectoryFullException extends Exception {
  /**
   * Initializes a new instance of the class.
   */
  public DirectoryFullException() {
    // Automatically assign the message text.
    super("The directory is full.");
  }
}

/**
 * This class satisfies the TelephoneDirectory interface by providing the add
 * method. It also provides a toString method that returns a readable version of
 * the contents of the directory.
 *
 * @author Cheng Jade
 * @assignment TA 3
 * @date Sep 16, 2008
 * @bugs None
 */
class ArrayTelephoneDirectory implements TelephoneDirectory {
  private final String[] array = new String[5];
  private int            count = 0;
  private int count2 = 0;


  /**
   * Adds an item to the telephone directory.
   *
   * @param item The item to add to the directory.
   * @throws DirectoryFullException Thrown if the directory is full.
   */
  public void add(final String item) throws DirectoryFullException {
    assert item != null;

    // Check if the directory is full, and if it is throw the
    // DirectoryFullException.
    if (this.count == this.array.length) {
      throw new DirectoryFullException();
    }

    // Add the item to the directory array, and keep track of how many items
    // have been added.
    this.array[this.count++] = item;
  }


  /**
   * Returns a readable version of the contents of the telephone directory.
   *
   * @return A readable version of the contents of the telephone directory.
   */
  @Override
  public String toString() {

    // If the directory is empty, return a special note.
    if (this.count == 0) {
      return "The telephone directory is empty.\n";
    }

    // Return the number of items in the directory.
    StringBuilder builder = new StringBuilder();
    builder.append("The telephone directory contains ");
    builder.append(this.count);
    builder.append(" items:\n");

    // Loop over each item added to the directory, and add it to the string builder.
    for (int i = 0; i < this.count; i++) {
      builder.append("  ");
      builder.append((i + 1));
      builder.append(". ");
      builder.append(this.array[i]);
      builder.append("\n");
    }

    // Return the list created above.
    return builder.toString();
  }
}

/**
 * The interface to a telephone directory.
 *
 * @author Cheng Jade
 * @assignment TA 3
 * @date Sep 16, 2008
 * @bugs None
 */
interface TelephoneDirectory {

  /**
   * Adds an item to the telephone directory.
   *
   * @param item The item to add to the directory.
   * @throws DirectoryFullException Thrown if the directory is full.
   */
  void add(String item) throws DirectoryFullException;
}
Valid HTML 4.01 Valid CSS