Java---ArrayList实现扑克牌的洗牌与抓牌程序

简介: 一副扑克牌去掉大小王还剩52张牌,三个人玩儿,也就是一个人能拿到13张牌,一副新牌是按照顺序进行排列好的,要想玩就必须先洗牌,就是将牌的初始顺序打乱然后每个人一次拿一张牌,直到每人拿到13牌。

一.介绍

一副扑克牌去掉大小王还剩52张牌,三个人玩儿,也就是一个人能拿到13张牌,一副新牌是按照顺序进行排列好的,要想玩就必须先洗牌,就是将牌的初始顺序打乱然后每个人一次拿一张牌,直到每人拿到13牌。


这个程序的内容主要运用了ArrayList,如果有哪些ArrarList中的方法不懂,可以查阅相关知识在进行阅读。


在代码前导入包:import java.util.*;


二.定义一张牌

public class Card {
    public char suit;     //花色
    public String rank;    //面值
    public Card(char suit, String rank) {
        this.suit = suit;                  //构造方法
        this.rank = rank;
    }
    @Override
    public String toString() {         //重写打印方法
        return "["+suit+":"+rank+"]";
    }
}


说明:一张牌有花色和面值,花色包括红桃方片那些,所以给的是字符类型,面值包含A,J,Q,K,所以给的字符串类型。


三. 程序主体

说明:我把程序主体全放到CardGame类中


3.1 定义一副新牌

public List<Card> getCards(){
        char[] suits = {'♥','♠','♦','♣'};   //花色数组
        String[] ranks = {"A","2","3","4","5","6","7","8","9","10","J","Q","K"};//面值数组
        List<Card> cards = new ArrayList<>(52);//定义数组列表来存放每一张牌,并给出数量
        for(int i=0;i<4;i++){
            for(int j=0;j<13;j++){
                cards.add(new Card(suits[i],ranks[j]));  //向列表中添加定义好的牌
            }
        }
        return cards;  //返回这幅牌
    }


3.2 定义洗牌方法

public void shuffle(List<Card> cards){
        Random random = new Random();   //获取随机数种子
        for(int i=cards.size()-1;i>0;i--){   
            int j = random.nextInt(i);
            swap(cards,i,j);         //依次将最后一张牌与随机一张牌交换顺序
        }
    }
 public void swap(List<Card> cards,int i,int j){    //交换方法swap
        Card temp = cards.get(i);
        cards.set(i,cards.get(j));
        cards.set(j,temp);
    }



3.3 定义三个人和抓牌过程

说明:我把这个过程放在主方法中

List<List<Card>> hands = new ArrayList<>(3);   //定义三个人
        hands.add(new ArrayList<>(13));
        hands.add(new ArrayList<>(13));     //每个人都需要揭13张牌
        hands.add(new ArrayList<>(13));
   //   三个人依次揭牌,每个人揭最上面的牌,揭到后就将它从牌的列表里消除,
  //      也就是消除最上面的牌一次给每个人
        for(int i=0;i<13;i++){
            for(int j=0;j<3;j++){
                hands.get(j).add(cards.remove(0));    
            }
        }

四. 输出每个人抓到的牌

 

System.out.println("A手中的牌:");
        System.out.println(hands.get(0));
        System.out.println("B手中的牌");
        System.out.println(hands.get(1));
        System.out.println("C手中的牌");
        System.out.println(hands.get(2));

 

五.全部代码展示和输出结果展示

代码展示:

public class Card {
    public char suit;
    public String rank;
    public Card(char suit, String rank) {
        this.suit = suit;
        this.rank = rank;
    }
    @Override
    public String toString() {
        return "["+suit+":"+rank+"]";
    }
}


输出结果:

微信图片_20221028191949.jpg

微信图片_20221028191952.jpg




相关文章
|
1天前
|
缓存 算法 Java
如何提高Java程序的性能?
Java是一种非常流行的编程语言,但是在处理大规模数据和高并发时,程序性能容易受到影响。本文将分享一些提高Java程序性能的技巧。
|
6天前
|
搜索推荐 算法 Java
滚雪球学Java(29):数组长度和排序算法:让你的程序更高效
【5月更文挑战第4天】🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
13 0
滚雪球学Java(29):数组长度和排序算法:让你的程序更高效
|
6天前
|
前端开发 Java 应用服务中间件
【异常解决】java程序连接MinIO报错The request signature we calculated does not match the signature you provided.
【异常解决】java程序连接MinIO报错The request signature we calculated does not match the signature you provided.
21 0
|
6天前
|
Java Linux C语言
一步带你了解java程序逻辑控制
一步带你了解java程序逻辑控制
17 2
|
6天前
|
Java 数据安全/隐私保护
java中程序控制的典例
java中程序控制的典例
13 1
|
6天前
|
存储 Java 数据库连接
使用Java开发桌面应用程序
使用Java开发桌面应用程序
24 0
|
6天前
|
关系型数据库 MySQL Java
通过使用阿里云服务器,搭建Java程序的运行环境
通过使用阿里云服务器,搭建Java程序的运行环境
|
6天前
|
存储 网络协议 Java
本地MinIO存储服务通过Java程序结合cpolar实现远程连接上传文件
本地MinIO存储服务通过Java程序结合cpolar实现远程连接上传文件
|
6天前
|
存储 Java 开发工具
【Java探索之旅】用面向对象的思维构建程序世界
【Java探索之旅】用面向对象的思维构建程序世界
12 0
|
6天前
|
小程序 Java 程序员
【Java探索之旅】我与Java的初相识(二):程序结构与运行关系和JDK,JRE,JVM的关系
【Java探索之旅】我与Java的初相识(二):程序结构与运行关系和JDK,JRE,JVM的关系
30 0