首先新建一个Card类
1 2 public class Card { 3 private String suit; 4 private int num; 5 6 public Card(String suit, int num) { 7 super(); 8 this.suit = suit; 9 10 if(num.equals("J")) { 11 this.num = 11; 12 } else if(num.equals("Q")) { 13 this.num = 12; 14 } else if(num.equals("K")) { 15 this.num = num; 16 } else if(num.equals("A")) { 17 this.num = 14; 18 } else { 19 this.num = num; 20 } 21 } 22 23 public int getNum() { 24 return this.num; 25 } 26 27 public String getSuit() { 28 return this.suit; 29 } 30 31 }
判断同一个花色顺子:
1 // 牌型1 同一花色的顺子 2 public static boolean isSF(List<Card> cards) { 3 String suit = cards.get(0).getSuit(); 4 int min = cards.get(0).getNum(); 5 int max = cards.get(0).getNum(); 6 7 8 for(int i = 1; i < cards.size(); i++) { 9 // 有花色异常就退出 10 if(!suit.equals(cards.get(i).getSuit())){ 11 return false; 12 } 13 14 int num = cards.get(i).getNum(); 15 if(num > max) { 16 max = num; 17 } else if(num < min) { 18 min = num; 19 } 20 21 // 最大比最小大4,说明是同花顺 22 if(i == cards.size()-1) { 23 return (max-min) == 4; 24 } 25 } 26 }
牌型2 四条 四张相同的数字+单张
1 // 牌型2 四条 四张相同的数字+单张 2 public static boolean isST(List<Card> cards) { 3 if(cards.get(0).getNum() == cards.get(3).getNum()) { 4 return True; 5 } else if(cards.get(1).getNum() == cards.get(4).getNum()) { 6 return True; 7 } else { 8 return false; 9 } 10 }
牌型3 葫芦 三张相同的数字+一对
1 public static boolean isHL(List<Card> cards) { 2 if(cards.get(0).getNum() == cards.get(2).getNum() && cards.get(3).getNum() == cards.get(4).getNum()) { 3 return True; 4 } else if(cards.get(0).getNum() == cards.get(1).getNum() && cards.get(2).getNum() == cards.get(4).getNum()) { 5 return Ture; 6 } 7 8 return false; 9 }
牌型4 同一花色
1 public static boolean isSZ(List<Card> cards) { 2 for(int i = 0; i < cards.size()-1; i++) { 3 if(!cards.get(i).getSuit().equals(cards.get(i+1).getSuit())){ 4 return false; 5 } 6 } 7 return true; 8 }
牌型5 花色不一样的顺子
1 public static boolean isTH(List<Card> cards) { 2 for(int i = 0; i < cards.size()-1; i++) { 3 if(cards.get(i).getNum() != cards.get(i+1).getNum()-1) { 4 return false 5 } 6 } 7 8 return True; 9 }
牌型6 三张相同两张单
1 //牌型6 三张相同两张单 2 public static boolean isTH(List<Card> cards) { 3 if(cards.get(0).getNum() == cards.get(2).getNum() && 4 cards.get(3).getNum() != cards.get(4).getNum() && 5 cards.get(3).getNum() != cards.get(0).getNum() && 6 cards.get(4).getNum() != cards.get(0).getNum()) { 7 return True; 8 } else if(cards.get(1).getNum() == cards.get(3).getNum() && 9 cards.get(0).getNum() != cards.get(4).getNum()&& 10 cards.get(0).getNum() != cards.get(1).getNum()&& 11 cards.get(4).getNum() != cards.get(4).getNum()) { 12 return True; 13 } else if(cards.get(2).getNum() == cards.get(4).getNum() && 14 cards.get(0).getNum() != cards.get(1).getNum()&& 15 cards.get(0).getNum() != cards.get(2).getNum()&& 16 cards.get(1).getNum() != cards.get(2).getNum()) { 17 return True; 18 } 19 20 return false; 21 }
剩下是是其他种类的牌型
完整代码:
1 public class Solution { 2 public static final SIZE = 5; 3 4 public static void main(String[] args) { 5 6 Scanner sc = new Scanner(System.in); 7 List<Card> cards = new ArrayList<Card>(); 8 String input = sc.nextLine(); 9 String[] ss = input.split(" "); 10 11 for(int i = 0; i < SIZE; i++) { 12 String suit = ss[2*i]; 13 int num = Integer.parseInt(ss[2*i+1]); 14 15 Card card = new Card(suit, num); 16 Cards.add(card); 17 } 18 19 Collections.sort(cards, new Comparator<Card>(){ 20 public int compare(Card c1, Card c2) { 21 if(c1.getNum() < c2.getNum()) { 22 return 1; 23 } 24 25 if(c1.getNum() == c2.getNum()) { 26 return 0; 27 } 28 29 return -1; 30 } 31 }); 32 33 // 判断牌型 34 if(isSF(cards)) { //牌型1 35 System.out.println(1); 36 } else if(isST(cards)) { 37 System.out.println(2); 38 } else if(isHL(cards)) { 39 System.out.println(3); 40 } else if(isSZ(cards)) { 41 System.out.println(4); 42 } else if(isTHX(cards)) { 43 System.out.println(5); 44 } else if(isTh(cards)) { 45 System.out.println(6); 46 } else { 47 System.out.println(7); 48 } 49 50 } 51 52 // 牌型1 同一花色的顺子 53 public static boolean isSF(List<Card> cards) { 54 String suit = cards.get(0).getSuit(); 55 int min = cards.get(0).getNum(); 56 int max = cards.get(0).getNum(); 57 58 59 for(int i = 1; i < cards.size(); i++) { 60 // 有花色异常就退出 61 if(!suit.equals(cards.get(i).getSuit())){ 62 return false; 63 } 64 65 int num = cards.get(i).getNum(); 66 if(num > max) { 67 max = num; 68 } else if(num < min) { 69 min = num; 70 } 71 72 // 最大比最小大4,说明是同花顺 73 if(i == cards.size()-1) { 74 return (max-min) == 4; 75 } 76 } 77 } 78 79 // 牌型2 四条 四张相同的数字+单张 80 public static boolean isST(List<Card> cards) { 81 if(cards.get(0).getNum() == cards.get(3).getNum()) { 82 return True; 83 } else if(cards.get(1).getNum() == cards.get(4).getNum()) { 84 return True; 85 } else { 86 return false; 87 } 88 } 89 90 // 牌型3 葫芦 三张相同的数字+一对 91 public static boolean isHL(List<Card> cards) { 92 if(cards.get(0).getNum() == cards.get(2).getNum() && cards.get(3).getNum() == cards.get(4).getNum()) { 93 return True; 94 } else if(cards.get(0).getNum() == cards.get(1).getNum() && cards.get(2).getNum() == cards.get(4).getNum()) { 95 return Ture; 96 } 97 98 return false; 99 } 100 101 // 牌型4 同一花色 102 public static boolean isSZ(List<Card> cards) { 103 for(int i = 0; i < cards.size()-1; i++) { 104 if(!cards.get(i).getSuit().equals(cards.get(i+1).getSuit())){ 105 return false; 106 } 107 } 108 return true; 109 } 110 111 //牌型5 花色不一样的顺子 112 public static boolean isTHX(List<Card> cards) { 113 for(int i = 0; i < cards.size()-1; i++) { 114 if(cards.get(i).getNum() != cards.get(i+1).getNum()-1) { 115 return false 116 } 117 } 118 119 return True; 120 } 121 122 //牌型6 三张相同两张单 123 public static boolean isTH(List<Card> cards) { 124 if(cards.get(0).getNum() == cards.get(2).getNum() && 125 cards.get(3).getNum() != cards.get(4).getNum() && 126 cards.get(3).getNum() != cards.get(0).getNum() && 127 cards.get(4).getNum() != cards.get(0).getNum()) { 128 return True; 129 } else if(cards.get(1).getNum() == cards.get(3).getNum() && 130 cards.get(0).getNum() != cards.get(4).getNum()&& 131 cards.get(0).getNum() != cards.get(1).getNum()&& 132 cards.get(4).getNum() != cards.get(4).getNum()) { 133 return True; 134 } else if(cards.get(2).getNum() == cards.get(4).getNum() && 135 cards.get(0).getNum() != cards.get(1).getNum()&& 136 cards.get(0).getNum() != cards.get(2).getNum()&& 137 cards.get(1).getNum() != cards.get(2).getNum()) { 138 return True; 139 } 140 141 return false; 142 } 143 144 145 }