模拟扑克牌,随机抽取五张牌,判断是否为同花顺

今天去面试,遇到这个面试题,当时想法想通了,我跟面试官说给我半小时,但是超时了没写出来。
回来复盘一下~
思路步骤:
①创建map容器存储扑克牌key为牌的索引,value为牌的值
②按照同花顺顺序存储到容器
③在52张牌内随机抽取五个索引
④索引排序
⑤判断索引是否连续和花色是否统一
实现代码:

/**
 * @Date 2022/8/19 10:12
 * @Author PAMELA
 * @Description 模拟扑克牌,随机抽取五张牌,判断是否为同花顺
 */
public class Poker {
    public static void main(String[] args) {
        //创建扑克容器 key为索引 value为值
        Map<Integer,String> hashMap = new HashMap<Integer,String>();

        //创建花色 与 值
        String[] colors = {"♦","♥","♠","♣"};
        String[] numbers = {"2","3","4","5","6","7","8","9","10","J","Q","K","A"};

        //组成牌 存入容器
        int index=0;
        for(String color : colors){
            for (String number : numbers) {
                hashMap.put(index,color+number);
                index++;
            }
        }
        System.out.println(hashMap);
        //是否同花顺
        boolean flag = true;
        //随机的5个索引
        int[] randIndex = new int[5];
        Random random = new Random();
        List<String> five = new ArrayList<String>();
        //随机抽选5张牌
        for (int i=0;i<5;i++){
            //保存索引
            randIndex[i] = random.nextInt(index);
            //保存数据
            five.add(hashMap.get(randIndex[i])) ;
        }
//====================================测试同花顺数据===============================
/*        //对应牌的索引
        randIndex[0]=20;
        randIndex[1]=21;
        randIndex[2]=22;
        randIndex[3]=23;
        randIndex[4]=24;
        //对应索引的值
        five.set(0,"♥9");
        five.set(1,"♥10");
        five.set(2,"♥J");
        five.set(3,"♥Q");
        five.set(4,"♥K");*/
//==============================================================================
        //索引排序
        Arrays.sort(randIndex);
        for (int i = 0; i < 5; i++) {
            System.out.print(randIndex[i]+" ");
        }
        System.out.println();

        //取头一张牌的花色
        String s = five.get(0);
        char color = s.charAt(0);

        for (int i = 0; i < 4; i++) {
            //比较剩余牌的花色
            String s1 = hashMap.get(randIndex[i]);
            char c = s1.charAt(0);
            if (randIndex[i]+1==randIndex[i+1] && c==color){
                continue;
            }else {
                flag=false;
                break;
            }
        }

        System.out.println(five);
        if (flag) {
            System.out.println("您的牌是同花顺!");
        }else{
            System.out.println("您的牌不是同花顺!");
        }

    }

}

测试结果:

{0=2, 1=3, 2=4, 3=5, 4=6, 5=7, 6=8, 7=9, 8=10, 9=J, 10=Q, 11=K, 12=A, 13=2, 14=3, 15=4, 16=5, 17=6, 18=7, 19=8, 20=9, 21=10, 22=J, 23=Q, 24=K, 25=A, 26=2, 27=3, 28=4, 29=5, 30=6, 31=7, 32=8, 33=9, 34=10, 35=J, 36=Q, 37=K, 38=A, 39=2, 40=3, 41=4, 42=5, 43=6, 44=7, 45=8, 46=9, 47=10, 48=J, 49=Q, 50=K, 51=A}
9 17 25 35 36 
[J,J,6,A,Q]
您的牌不是同花顺!
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值