小小扑克牌算法

1.定义一个扑克牌类Card:

java 复制代码
package democard;
public class Card {
    public String suit;//表示花色
    public int rank;//表示牌点数
    @Override
    public String toString() {
        return "{"+suit +rank+"}";
    }
    //实例方法,初始化牌的点数和花色
    public Card(String suit, int rank){
        this.suit=suit;
        this.rank=rank;
    }
}

2.实现游戏功能:

1.初始化一副牌

java 复制代码
//初始化一副牌
    public List<Card> buyCard(){
        List<Card> cardlist = new ArrayList<>();//定义一个牌堆
        for(int i=0;i<suits.length;i++){
            for (int j = 1; j <=13 ; j++) {
                Card card=new Card(suits[i],j);
                //通过循环产生52个对象,将每一个对象的地址存放到牌堆(cardlist)当中
                cardlist.add(card);
            }
        }
        return cardlist;
    }

2.洗牌

java 复制代码
//洗牌
    public void shuffleCard(List<Card> cardlist){
        Random random=new Random();//调用时间戳随机生成一个数
        for (int i = cardlist.size()-1; i >0; i--) {//让其与每一个位置的牌进行交换
            int randindex=random.nextInt(i);
            swap(cardlist,i,randindex);
        }
    }

3.交换牌

java 复制代码
//交换牌
    public void swap(List<Card> cardlist,int i,int j){
        Card tmp=cardlist.get(i);
        cardlist.set(i,cardlist.get(j));
        cardlist.set(j,tmp);
    }

4.发牌

java 复制代码
//发牌
    //每个人发五张,发给三个人
    public List<List<Card>> play(List<Card> cardlist){
        List<List<Card>> hand=new ArrayList<>();
        //定义一个二维数组,存放每一个一维数组的地址
        
        List<Card> hand1=new ArrayList<>();
        List<Card> hand2=new ArrayList<>();
        List<Card> hand3=new ArrayList<>();

        hand.add(hand1);//将每一位玩家的牌和二维数组产生联系
        hand.add(hand2);
        hand.add(hand3);

        for (int i = 0; i <3 ; i++) {
            for (int j = 0; j < 5; j++) {
                Card card=cardlist.remove(0);
                //从牌堆里删除第一张牌,类似于头删
                //将每删除的一张牌存到card当中,在添加给每一位玩家,实现了发牌的功能
                hand.get(i).add(card);
            }
        }
        return hand;
        //将二位数组的地址返回,以后调用者可以用该地址查看牌堆剩余的牌以及各个玩家的牌
    }

3.玩游戏

java 复制代码
package democard;

import java.util.List;

public class Test {
    public static void main(String[] args) {
        Game game=new Game();
        List<Card> cardList=game.buyCard();
        System.out.println("洗牌前:"+cardList);
        game.shuffleCard(cardList);
        System.out.println("洗牌后:"+cardList);

        List<List<Card>> hand=game.play(cardList);
        for (int i = 0; i <3 ; i++) {
            System.out.println("第"+(i+1)+"个人的牌是:"+hand.get(i));
        }
        System.out.println("剩下的牌:"+cardList);

    }
}

最后实现的效果如下:

该算法是对List<List<Colletion ? extends E>> 的运用以及理解 ,希望大家支持!!

相关推荐
q***33372 小时前
oracle 12c查看执行过的sql及当前正在执行的sql
java·sql·oracle
mit6.8244 小时前
bfs|栈
算法
Y***h1875 小时前
第二章 Spring中的Bean
java·后端·spring
8***29315 小时前
解决 Tomcat 跨域问题 - Tomcat 配置静态文件和 Java Web 服务(Spring MVC Springboot)同时允许跨域
java·前端·spring
CoderYanger5 小时前
优选算法-栈:67.基本计算器Ⅱ
java·开发语言·算法·leetcode·职场和发展·1024程序员节
jllllyuz6 小时前
Matlab实现基于Matrix Pencil算法实现声源信号角度和时间估计
开发语言·算法·matlab
q***06296 小时前
Tomcat的升级
java·tomcat
稚辉君.MCA_P8_Java6 小时前
DeepSeek 插入排序
linux·后端·算法·架构·排序算法
多多*6 小时前
Java复习 操作系统原理 计算机网络相关 2025年11月23日
java·开发语言·网络·算法·spring·microsoft·maven
青云交6 小时前
Java 大视界 -- Java 大数据在智能物流无人配送车路径规划与协同调度中的应用
java·spark·路径规划·大数据分析·智能物流·无人配送车·协同调度