001    package ps0.optional;
002    
003    
004    /**
005     * Represents one of 13 values (2-10, Jack, Queen, King, Ace) that appear
006     * on a playing card. This class is immutable.
007     */
008    public enum CardValue  {
009    
010        //
011        // CONSTANTS
012        //
013    
014        // The 13 acceptable card values.
015    
016        /**
017         * The card value representing 2.
018         */
019        TWO("two", "2"),
020    
021        /**
022         * The card value representing 3.
023         */
024        THREE("three", "3"),
025    
026        /**
027         * The card value representing 4.
028         */
029        FOUR("four", "4"),
030    
031        /**
032         * The card value representing 5.
033         */
034        FIVE ("five", "5"),
035    
036        /**
037         * The card value representing 6.
038         */
039        SIX ("six", "6"),
040    
041        /**
042         * The card value representing 7.
043         */
044        SEVEN ("seven", "7"),
045    
046        /**
047         * The card value representing 8.
048         */
049        EIGHT ("eight", "8"),
050    
051        /**
052         * The card value representing 9.
053         */
054        NINE("nine", "9"),
055    
056        /**
057         * The card value representing 10.
058         */
059        TEN ("ten", "10"),
060    
061        /**
062         * The card value representing a Jack.
063         */
064        JACK ("Jack", "J"),
065    
066        /**
067         * The card value representing a Queen.
068         */
069        QUEEN("Queen", "Q"),
070    
071        /**
072         * The card value representing a King.
073         */
074        KING ("King", "K"),
075    
076        /**
077         * The card value representing an Ace.
078         */
079        ACE ("Ace", "A");
080    
081        //
082        // MEMBER VARIABLES
083        //
084    
085        /**
086         * The name of this card value.
087         */
088        private String name;
089    
090        /**
091         * The symbol representing this card value that appears on a playing card.  For
092         * the values 2-10, this symbol is simply the digits themselves; for JACK, QUEEN,
093         * KING, and ACE values, the symbols are "J", "Q", "K", and "A" respectively.
094         */
095        private String letterOnCard;
096    
097        //
098        // METHODS
099        //
100    
101        //-------------------------------------------
102        /**
103         * Creates a new card value.
104         *
105         * @param valueName  the name of this value
106         * @param letter     the symbol representing this card value that appears
107         *                   on a playing card
108         *
109         *
110         *
111         * @modifies this
112         * @effects  creates a new <code>CardValue</code> object
113         */
114        CardValue(String valueName, String letter) {
115            name = valueName;
116            letterOnCard = letter;
117        }
118    
119        //-------------------------------------------
120        /**
121         * Returns the name of this value.
122         * <p>
123         * The value names can be either "2", "3", ..., "10", "Jack", "Queen", "King", or "Ace".
124         *
125         *
126         * @effects  returns the name of this value
127         */
128        public String getName() {
129            return name;
130        }
131    
132        //-------------------------------------------
133        /**
134         * Returns the symbol representing this card value.
135         * <p>
136         * For the values 2-10, this symbol is simply the digits themselves; for JACK, QUEEN,
137         * KING, and ACE values, the symbols are "J", "Q", "K", and "A" respectively.
138         *
139         *
140         * @effects  returns the symbol representing this card value
141         */
142        public String getLetterOnCard() {
143            return letterOnCard;
144        }
145    
146    
147        //-------------------------------------------
148        /**
149         * Returns a description of this value.
150         *
151         *
152         * @effects  returns a description of this value
153         */
154        public String toString() {
155            return getName();
156        }
157    
158    }