java从扑克牌中随机抽5张排,判断是不是一个顺子

2~10为数字本身,A为1,J为11,Q为12,K为13,而大,小王可以看成任意数字
我是真的造了一副牌去解决这个问题的,一个数组长度为54
这道题的重点在于判断是否是一个顺子,首先将五个数进行排序,计算每相邻两个数之间的差的和跟0(大小王)的个数进行比较,如果这个差的和小于0的个数,那么就是一个顺子,此外还要考虑除0以外如果出现对子直接判断不是顺子
部分代码如下

public static boolean judge(int[] crr) {
    Arrays.sort(crr);
    int distance = 0;//每相邻两个数之差的和
    int zero=0;//0的个数
    System.out.println(Arrays.toString(crr));
    for(int i=0;i<crr.length&&crr[i]==0;i++,zero++);
    for(int i=zero;i<crr.length-1;i++){
        if(crr[i]==crr[i]+1){
            return false;
        }
        if(!(crr[i]+1==crr[i+1])){
            distance+=crr[i+1]-crr[i]-1;
        }
    }
    if(zero < distance){
        return false;
    }else{
        return true;
    }
}

下面进行测试(与上面的代码一起进行)

public class PlayingCard {
    //按顺序创建一副扑克牌
    public static void create(int[] arr){
        Random random = new Random();
        int size=0;
        for(int i=1;i<=13;i++){
            for(int j=1;j<=4;j++){
                arr[size++]=i;
            }
        }
    }

    //打乱这副牌的顺序
    public static void upset(int[] arr){
        Random random = new Random();
        int flag=0,temp;
        while(flag<=1000){
            int n1 = random.nextInt(53);
            int n2 = random.nextInt(53);
            temp=arr[n1];
            arr[n1]=arr[n2];
            arr[n2]=temp;
            flag++;
        }
    }

    public static void main(String[] args) {
        System.out.print("请抽出五张牌(输入数组下标):");
        int[] arr = new int[54];//一副牌
        int[] brr = new int [5];//五张牌的下标
        int[] crr = new int[5];//抽出的五张牌
        create(arr);//创建一副牌
        upset(arr);//把这副牌的顺序打乱
        Scanner scanner = new Scanner(System.in);
        for(int i=0;i<brr.length;i++){
            brr[i]=scanner.nextInt();
            crr[i]=arr[brr[i]-1];
            System.out.print(crr[i]+" ");
        }
        System.out.println();
        if(judge(crr)){//判断5张牌是否是顺子
            System.out.println("这五张牌是顺子");
        }else{
            System.out.println("这五张牌不是顺子");
        }
        System.out.println();
        System.out.println(Arrays.toString(arr));
    }
}

测试结果
在这里插入图片描述

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值