public class Enums {
  private enum Suit { CLUBS, HEARTS, SPADES, DIAMONDS };
  private enum Rank { ACE, TWO, THREE, FOUR, FIVE, SIX, SEVEN, EIGHT,
                      NINE, TEN, JACK, QUEEN, KING };
  private enum Person { Joe(4), Mike(5) ;
                        private final int age;
                        private Person(int age) {
                          this.age = age;
                        }
                        public int getAge() {
                          return age;
                        }
  };
  
  private static void expect(boolean v) {
    if (! v) throw new RuntimeException();
  }

  private static boolean checkFaceCard(Rank r) {
    switch (r) {
    case ACE:
    case JACK:
    case QUEEN:
    case KING:
      return true;
    }
    return false;
  }

  public static void main(String[] args) {
    expect(Suit.CLUBS.ordinal() == 0);
    expect(Suit.valueOf("DIAMONDS") == Suit.DIAMONDS);
    System.out.println(Suit.SPADES);
    expect(Suit.values()[1] == Suit.HEARTS);
    expect(!checkFaceCard(Rank.FIVE));
    expect(checkFaceCard(Rank.KING));
    expect(Person.Mike.getAge() == 5);
  }
}