/****************************************************************************** * name: Donna Gabai * netID: dgabai * precept: P99 * * Description: * PokerHand data type. * Can construct a hand from standard input, format a hand for output, * determine if a hand is a flush or a full house. * Test main() sets up 5-card poker hands from standard input, * prints flushes and full houses (one per line). * * Dependencies: StdIn, StdOut */ public class PokerHand { // class constants private static final int HANDSIZE = 5; // 5 cards per hand // instance variables private String[] hand; // each String is one card // constructor reads a 5-card poker hand from StdIn public PokerHand() { hand = new String[HANDSIZE]; for (int i = 0; i < HANDSIZE; i++) { hand[i] = StdIn.readString(); } // sort the hand, note Queen is higher than King! // Ten is highest of all! // 2, 3, 4, 5, 6, 7, 8, 9, A, J, K, Q, T java.util.Arrays.sort(hand); } // is this hand a flush? public boolean flush() { // looking for suit (last character) all the same char suit = hand[0].charAt(1); for (int i = 1; i < HANDSIZE; i++) { if (suit != hand[i].charAt(1)) return false; } // made it through! ALL EQUAL! return true; } // is this hand a full house? public boolean fullHouse() { // looking for 3 matching and 2 matching // since hand is sorted, first and last will be different // first card char rank1 = hand[0].charAt(0); int sumRank1 = 1; // last card char rank2 = hand[HANDSIZE - 1].charAt(0); int sumRank2 = 1; // count cards similar to first and last cards for (int i = 1; i < HANDSIZE - 1; i++) { if (hand[i].charAt(0) == rank1) sumRank1++; if (hand[i].charAt(0) == rank2) sumRank2++; } // is it a full house? if (sumRank1 == 3 && sumRank2 == 2) return true; if (sumRank1 == 2 && sumRank2 == 3) return true; // no full house :( return false; } // string representation of this hand sorted public String toString() { String wholeHand = ""; for (int i = 0; i < HANDSIZE; i++) wholeHand = wholeHand + hand[i] + " "; return wholeHand; } // test main public static void main(String[] args) { // input one hand at a time // output it if it is a flush or full house while (!StdIn.isEmpty()) { PokerHand ph = new PokerHand(); if (ph.flush()) StdOut.println(" Flush: " + ph); if (ph.fullHouse()) StdOut.println("Full house: " + ph); } } }