java 二位数组中 判断扑克的最大的牌型

现在有一个二维数组int【7】【2】,第一个是扑克的数字。第二个是花色。总共有7张牌,现在要从中挑娶五张,组成最大的牌型牌组大小规则:皇家同花顺>同花顺>四条>葫芦>同花>顺子>三条>两对>一对>单牌皇家同花顺:同花色的A, K, Q, J和10.同花顺:五张同花色的连续牌。四条:四张是相同点数但不同花的扑克牌,第五张是随意的一张牌葫芦:三带二同花:此牌由五张不按顺序但相同花的扑克牌组成顺子:此牌由五张顺序扑克牌组成三条:由三张相同点数和两张不同点数的扑克组成两对:两对点数相同但两两不同的扑克和随意的一张牌组成一对:由两张相同点数的扑克牌和另三张随意的牌组成单张:既不是同一花色也不是同一点数的五张牌组成。希望个位高手帮忙!在线等!谢谢!花色:数字1代表方块 2代表草花 3代表红心 4代表黑桃 请大家看清我的前提,我是要在维数组中,谢谢
2026年09月16日 01:03
有3个网友回答
网友(1):

写代码不难..给你一个思路 你就按照这个思路写.
首先按照7张牌的大小 存到一个hashmap 存的每种数字 及其 出现的次数..
当 hashMap 的count <5 意味着 他们不可能存在 同花顺 同花之类的..那么你可以轻松的判断里面到底是 4条 3条之类的 这个很简单...
当 count >= 5的时候 你就需要判断是否为同花 或者同花顺了..
这个也简单 你在按照花色 进行一次 hashmap 然后看看是否有同一个花色超过5的的..如果没有 则不可能为同花...同样 顺子的判断也根据所有的数字 去重复之后排序..看有没有5个连续的数字..如果没有 就不是顺子..
这样就可以搞定了

网友(2):

public class TestStraightFlush {

/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Card[] cards = new Card[] {
new Card("Spade", 5),
new Card("Spade", 6),
new Card("Spade", 7),
new Card("Spade", 8),
new Card("Spade", 9)
};
System.out.println(isSF(cards)?"是同花顺":"不是同花顺");
}

// 判断是否同花顺
static boolean isSF(Card[] cards) {
// 判断花色
String suit = cards[0].getSuit();
int min = cards[0].getNum();
int max = cards[0].getNum();
for (int i = 1; i < cards.length; i++) {
// 有花色异常则返回false
if (!suit.equals(cards[i].getSuit()))
return false;
//
int num = cards[i].getNum();
if (num > max)
max = num;
else if (num < min)
min = num;
// 最后一张牌,确定max和min是所有牌的最大和最小
if (i == cards.length - 1)
//最大比最小大4,说明是同花顺
return (max - min) == 4;
}
return true;
}

}

// 扑克牌类
class Card {
String suit;// 花色
int num;// 大小

public String getSuit() {
return suit;
}

public void setSuit(String suit) {
this.suit = suit;
}

public int getNum() {
return num;
}

public void setNum(int num) {
this.num = num;
}

public Card(String suit, int num) {
super();
this.suit = suit;
//1按照14理解
if(num == 1)
this.num = 14;
else
this.num = num;
}
}

网友(3):

这个规则从小就懂,但还没写过。

应该是13张的吧