java如何判断牌型

首先新建一个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     }

剩下是是其他种类的牌型

扫描二维码关注公众号,回复: 5135665 查看本文章

完整代码:

  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 }

猜你喜欢

转载自www.cnblogs.com/wylwyl/p/10343281.html
今日推荐