德州扑克判断牌型的代码(原创)

本文介绍了使用Java实现德州扑克中判断玩家手牌类型的一种算法,涵盖了从顺子到四条的各种常见牌型,详细解析了算法逻辑和关键代码片段。

在这里插入图片描述

import java.util.HashMap;
import java.util.Scanner;
import java.util.TreeSet;

public class Demo05 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = 0;
        TreeSet<Integer> set1 = new TreeSet<>();
        TreeSet<String> set2 = new TreeSet<>();
        HashMap<Integer,Integer> map = new HashMap<>();
        while(n < 5){
            int p;
            String s;
            String pStr;
            pStr = sc.next();
            s = sc.next();
            if(pStr.equals("J")){
                p = 11;
            }else if(pStr.equals("Q")){
                p = 12;
            }else if(pStr.equals("K")){
                p = 13;
            }else if(pStr.equals("A")){
                p = 1;
            }else{
                p = Integer.parseInt(pStr);
            }
            set1.add(p);
            set2.add(s);
            if(null != map.get(p)){
                map.put(p,map.get(p)+1);
            }else{
                map.put(p,1);
            }
            n++;
        }
        boolean isTongHua = false;//判断是否是同花,false:不是同花,true:是同花,默认为不是同花
        if(set2.size() == 1){
            isTongHua = true;
        }
        int mostNum = 1;//重复牌(牌号,不分颜色)最多的数量,默认为1
        for(Integer i:map.keySet()){
            if(map.get(i) > mostNum) {
                mostNum = map.get(i);
            }
        }

        //判断是否是同花顺
        if(isTongHua && mostNum == 1){
            if((set1.last() - set1.first()) == 4){
                System.out.println(1);
                return;
            }else if(set1.contains(1) && set1.contains(10) && set1.contains(11) && set1.contains(12) && set1.contains(13)){
                System.out.println(1);
                return;
            }
        }

        //判断是否是4条
        if(mostNum == 4){
            System.out.println(2);
            return;
        }

        //判断是否是葫芦
        if(mostNum == 3 && map.keySet().size() == 2){
            System.out.println(3);
            return;
        }

        //判断是否是同花
        if(isTongHua){
            System.out.println(4);
            return;
        }

        //判断是否是顺子
        if(mostNum == 1) {
            if ((set1.last() - set1.first()) == 4) {
                System.out.println(5);
                return;
            } else if (set1.contains(1) && set1.contains(10) && set1.contains(11) && set1.contains(12) && set1.contains(13)) {
                System.out.println(5);
                return;
            }
        }

        //判断是否是葫芦
        if(mostNum == 3 && map.keySet().size() == 3){
            System.out.println(6);
            return;
        }

        //其他
        System.out.println(7);
        return;
    }
}


评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值