/** * A standard playing card. */ public class Card { public static final String[] RANKS = { null, "Ace", "2", "3", "4", "5", "6", "7", "8", "9", "10", "Jack", "Queen", "King"}; public static final String[] SUITS = { "Clubs", "Diamonds", "Hearts", "Spades"}; private final int rank; private final int suit; /** * Constructs a card of the given rank and suit. */ public Card(int rank, int suit) { this.rank = rank; this.suit = suit; } /** * Returns a negative integer if this card comes before * the given card, zero if the two cards are equal, or * a positive integer if this card comes after the card. */ public int compareTo(Card that) { if (this.suit < that.suit) { return -1; } if (this.suit > that.suit) { return 1; } if (this.rank < that.rank) { return -1; } if (this.rank > that.rank) { return 1; } return 0; } /** * Returns true if the given card has the same * rank AND same suit; otherwise returns false. */ public boolean equals(Card that) { return this.rank == that.rank && this.suit == that.suit; } /** * Gets the card's rank. */ public int getRank() { return this.rank; } /** * Gets the card's suit. */ public int getSuit() { return this.suit; } /** * Returns the card's index in a sorted deck of 52 cards. */ public int position() { return this.suit * 13 + this.rank - 1; } /** * Returns a string representation of the card. */ public String toString() { return RANKS[this.rank] + " of " + SUITS[this.suit]; } }