The Art and Science of Java, a course book that uses the ACM library has an exercise that reads like this. > Implement a new class called Card that includes the following entries: > > • Named constants for the four suits (CLUBS, DIAMONDS, HEARTS, SPADES) > and the four ranks that are traditionally represented in words (ACE, > JACK, QUEEN, KING). The values of the rank constants should be 1, 11, > 12, and 13, respectively. > > • A constructor that takes a rank and a suit and returns a Card with > those values. • Accessor methods getRank and getSuit to retrieve the > rank and suit components of a card. > > • An implementation of the toString method that returns the complete > name of the card. Now, this question is a little hard to understand, but nevertheless I done a class that I think answers this: /** Ficheiro: Carta.java * * Classe que vai representar os diferentes valores e naipes de uma carta de um baralho normal * de 52 cartas. Exercício para construir uma classe completa juntamente com construtores, * gets de Valores e Naipes e de método toString. */ public class Carta { // Constantes do Naipe (Rank) das Cartas public static final String AS = "Ás"; public static final String REI = "Rei"; public static final String DAMA = "Dama"; public static final String VALETE = "Valete"; // Constantes do Valor Facial (Suit) das Cartas public static final String COPAS = "Copas"; public static final String PAUS = "Paus"; public static final String OUROS = "Ouros"; public static final String ESPADAS = "Espadas"; /** * Cria uma nova carta de um baralho regular de 52 cartas. * @param valor O valor facial da carta (ex. Ás, Rei, 10...) * @param naipe O naipe da carta */ public Carta (int valor, int naipe) { valorCarta = valor; numNaipe = naipe; } /** * Obtém o valor facial da carta (existem 13 valores faciais) * @return O valor facial da carta em String */ public String getValorCarta() { switch (valorCarta) { case 1: return AS; case 11: return REI; case 12: return DAMA; case 13: return VALETE; default: return "" + valorCarta; } } /** * Obtém o naipe da carta (existem 4 naipes) * @return O naipe da carta em String */ public String getNaipeCarta () { switch (numNaipe) { case 1: return COPAS; case 2: return PAUS; case 3: return OUROS; case 4: return ESPADAS; default: return ("Naipe Inválido"); } } /** * Cria uma representação em String da Carta (Valor e Naipe) * @return Representação em String da Carta (Valor e Naipe) */ public String toString () { return getValorCarta() + " de " + getNaipeCarta(); } // variáveis de instância que registam o Valor e o Naipe da Carta em integers. private int valorCarta; private int numNaipe; } Sorry about the commentaries, I speak portuguese and I written the commentaries in that language. I hope the code is easy enough to understand. So my question is if I have written well the class, according to specifications, especially the Public Constants and the Get Methods. I am not sure if they wanted me to make the Constants Int types instead of Strings. Also I didn't assign any parameters to the Get Methods, so they will only give me the rank or suit of a new Card Object. I am not sure if they wanted me to attribute an int param to these methods. As a sidenote, I wrote then a short program that demonstrates this class in action, in choosing and displaying a random card (note that the run method is the main method in acm libraries): import acm.program.*; import acm.util.*; public class testeCarta extends ConsoleProgram{ // Escolhe uma carta aleatóriade um baralho de 52 cartas e imprime no ecrã public void run () { println ("Este programa vai seleccionar uma carta aleatória"); Carta cartaAleat = new Carta (rGen.nextInt(1,13),rGen.nextInt(1,4)); println (cartaAleat); } // variável de instància que permite a utilização de gerador de números aleatórios public RandomGenerator rGen = RandomGenerator.getInstance(); }