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 流计算
利用java8 的 CompletableFuture 优化 Flink 程序
本文探讨了Flink使用avatorscript脚本语言时遇到的性能瓶颈,并通过CompletableFuture优化代码,显著提升了Flink的QPS。文中详细介绍了avatorscript的使用方法,包括自定义函数、从Map中取值、使用Java工具类及AviatorScript函数等,帮助读者更好地理解和应用avatorscript。
利用java8 的 CompletableFuture 优化 Flink 程序
|
2月前
|
XML 存储 JSON
Java程序部署
Java程序部署
|
28天前
|
Java Maven 数据安全/隐私保护
如何实现Java打包程序的加密代码混淆,避免被反编译?
【10月更文挑战第15天】如何实现Java打包程序的加密代码混淆,避免被反编译?
42 2
|
1月前
|
安全 Java Linux
java程序设置开机自启
java程序设置开机自启
|
1月前
|
运维 Java Linux
【运维基础知识】Linux服务器下手写启停Java程序脚本start.sh stop.sh及详细说明
### 启动Java程序脚本 `start.sh` 此脚本用于启动一个Java程序,设置JVM字符集为GBK,最大堆内存为3000M,并将程序的日志输出到`output.log`文件中,同时在后台运行。 ### 停止Java程序脚本 `stop.sh` 此脚本用于停止指定名称的服务(如`QuoteServer`),通过查找并终止该服务的Java进程,输出操作结果以确认是否成功。
35 1
|
2月前
|
消息中间件 分布式计算 Java
Linux环境下 java程序提交spark任务到Yarn报错
Linux环境下 java程序提交spark任务到Yarn报错
41 5
|
2月前
|
Java 编译器 数据库连接
探索Java中的异常处理:提升程序的鲁棒性
【9月更文挑战第25天】在Java的世界里,异常是那些不请自来、令人头疼的“客人”。它们悄无声息地潜入我们的代码,一旦出现,便可能导致程序崩溃或行为异常。但是,如果能够妥善管理这些异常,我们就能将潜在的灾难转变为增强程序鲁棒性和用户体验的机会。本文将通过深入浅出的方式,带领读者理解Java异常处理的重要性,并提供实用的策略来优雅地处理这些意外情况。让我们一起学习如何在Java中捕捉、处理和预防异常,确保我们的程序即使在面对不可预见的错误时也能保持稳健运行。
|
1月前
|
Java Python
如何通过Java程序调用python脚本
如何通过Java程序调用python脚本
27 0
|
2月前
|
监控 Java 数据库
Java程序如何进行不停机更新?
Java程序如何进行不停机更新?
94 1
|
1月前
|
Java
java的程序记录时间
java的程序记录时间
24 0