用java如何判断扑克牌同花顺

JavaScript012

用java如何判断扑克牌同花顺,第1张

扑克牌有两个属性,花色和牌面大小,可以分别比较花色和牌面大小是否递增或递减来确定是不是同花顺.但是由于扑克牌会有JQKA,所以牌面大小最好以数组或者字符串的方式实现,通过比较下标来比较大小,以下是大概的代码

public class PuKe {

private String color

private String num

public String getColor() {

return color

}

public void setColor(String color) {

this.color = color

}

public String getNum() {

return num

}

public void setNum(String num) {

this.num = num

}

public PuKe(String color, String num) {

super()

this.color = color

this.num = num

}

public static void main(String[] args) {

List<PuKe>card = new ArrayList<PuKe>()

card.add(new PuKe("black", "2"))

card.add(new PuKe("black", "3"))

card.add(new PuKe("black", "4"))

card.add(new PuKe("black", "5"))

card.add(new PuKe("black", "6"))

//这里因为10是两位数且牌面里面用不到1,所以直接用1代替10

String check = "234567891JQKA"

boolean flage =true

//自定义比较器,用num在check里的下标大小作为比较依据排序

Collections.sort(card, new Comparator<Object>() {

@Override

public int compare(Object o1, Object o2) {

PuKe er1 = (PuKe) o1

PuKe er2 = (PuKe) o2

Integer org1 = (int)(er1.getNum() == null ? 0.0 : check.indexOf(er1.getNum()))

Integer org2 = (int)(er1.getNum() == null ? 0.0 : check.indexOf(er2.getNum()))

return org1.compareTo(org2)

}

})

for (int i = 0 i < card.size()-1 i++) {

//遍历所有的牌,如果颜色不一样直接跳出循环,不是同花顺

if(!card.get(i).getColor().equals(card.get(i+1).getColor())){

flage =false

break

}

//如果上一张减去下一张的差值不是1,说明牌面不是顺子,也不是同花顺,跳出循环

if((int)check.indexOf(card.get(i+1).getNum())-(int)check.indexOf(card.get(i).getNum())!=1){

flage = false

break

}

}

if(flage){

System.out.println("牌面是同花顺")

}else{

System.out.println("牌面不是同花顺")

}

}

}

不过这种方法唯一不好的地方是check中不能直接用10,将来展示的时候需要判定,展示的是1时直接改成10.

其实实现方法很多,我这么写是因为最近在复习,这么写用到的知识点相对会多一点.

从扑克牌中随机抽5张牌,判断是不是一个顺子,即这5张牌是不是连续的。2~10为数字本身,A为1,J为11,Q为12,K为13,而大、小王为 0 ,可以看成任意数字。A 不能视为 14。

示例 1:

示例 2:

限制:

如果没有重复的牌:

方法一:set去重

方法二:排序后遍历

从扑克牌中随机抽5张牌,判断是不是一个顺子,即这5张牌是不是连续的。2~10为数字本身,A为1,J为11,Q为12,K为13,而大、小王为 0 ,可以看成任意数字。A 不能视为 14。

示例 1:

输入: [1,2,3,4,5]

输出: True

示例 2:

输入: [0,0,1,2,5]

输出: True

限制:

数组长度为 5

数组的数取值为 [0, 13] .

如果要构成是顺子的情况,那么必然需要连起来,比如像下图中的 1,2,3,4,5.

有一个大小王,也就是有一个数字 0,对于我们举的例子1,2,3,4,5,中有一个数字被 0进行替换了。

如果想要构成顺子,那么必须是1,2,3,4,5中的任意一个被0替换了,因为想要0可以变成任意的一个数字

上述5种情况,都是可以构成顺子的情况。

总共有上述10种情况,观察这10种情况知道:

从上面的流程中可以知道本题的算法思路: