package test_5; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.HashMap; import java.util.Map; /** * No.227 簡単ポーカー * 5枚のカードが配られます。それぞれのカードには、1以上13以下のいずれかの整数が書かれています。カードに書かれている整数の組み合わせによって役が決まります。 * * 配られた5枚のカードが、以下のいずれの役に該当するかを調べてください。複数の役に該当する場合は、以下で先に記述した方の役に該当するものとします。 * * FULL HOUSE * ある数をちょうど3つと、別の数をちょうど2つ含む。 * THREE CARD * ある数をちょうど3つ含む。 * TWO PAIR * ある数をちょうど2つと、別の数をちょうど2つ含む。 * ONE PAIR * ある数をちょうど2つ含む。 */ public class Question_07_0526_1 { static final int CARD_COUNT = 5; static final int NUM_MIN = 1; static final int NUM_MAX = 13; // カードの数字と枚数のマップ static Map numCountMap = new HashMap(); // 役名マップ static HashMap roleMap = new HashMap(); public static void main(String[] args) { roleMap.put("11", "FULL HOUSE"); // ある数をちょうど3つと、別の数をちょうど2つ含む。 roleMap.put("10", "THREE CARD"); // ある数をちょうど3つ含む。 roleMap.put("02", "TWO PAIR"); // ある数をちょうど2つと、別の数をちょうど2つ含む。 roleMap.put("01", "ONE PAIR"); // ある数をちょうど2つ含む。 roleMap.put("00", "NO HAND"); // なし InputStreamReader re = new InputStreamReader(System.in); BufferedReader br = new BufferedReader(re); try { String[] inpoutCard = br.readLine().split(" "); boolean errorFlg = false; if (inpoutCard.length == CARD_COUNT) { // カードの数字を入れる int[] CardList = new int[inpoutCard.length]; for (int i = 0; i < inpoutCard.length; i++) { int cardNum = Integer.parseInt(inpoutCard[i]); if (NumJudg(cardNum, NUM_MIN, NUM_MAX)) { CardList[i] = Integer.parseInt(inpoutCard[i]); } else { System.out.println("カードの数字が範囲外です"); errorFlg = true; break; } } int twoPair = 0; int treePair = 0; // エラーが無ければ処理をする if (!errorFlg) { // numCountMapに入れる pairCheck(CardList); // cardNum = カードの数字, numCountMap.get(cardNum) = 枚数 for (int cardNum : numCountMap.keySet()) { // System.out.println(cardNum + "=>" + numCountMap.get(cardNum)); if (numCountMap.get(cardNum) == 2) { twoPair++; } if (numCountMap.get(cardNum) == 3) { treePair++; } } String roleMapKey = String.valueOf(treePair) + String.valueOf(twoPair); // 役名出力 // System.out.println(roleMapKey); System.out.println(roleMap.get(roleMapKey)); } } else { System.out.println("カードの枚数は5枚入力して下さい"); } } catch (NumberFormatException e) { System.out.println("数字を入力して下さい。"); } catch (IOException e) { System.out.println("エラーが発生しました。"); } finally { try { re.close(); br.close(); } catch (IOException e) { System.out.println("InputStreamReader、BufferedReaderクローズ中にエラーが発生しました"); } } } /** * 有効値判定 * @param num 判定する数字 * @param max 最大値 * @param min 最小値 * @return 範囲内ならtrue,範囲外ならfalseを返す */ private static boolean NumJudg(int num, int min, int max) { Boolean result = false; if (min <= num && num <= max) { result = true; } return result; } /** * カードの種類と枚数をnumCountMapに入れる * @param cardList */ private static void pairCheck(int[] cardList) { //何枚あるか int count; // マップに入れる for (int card : cardList) { if (numCountMap.containsKey(card)) { // Mapに登録済み count = numCountMap.get(card) + 1; } else { // Mapに未登録 count = 1; } numCountMap.put(card, count); } } }