【java-数据结构篇】神奇 ArrayList,一键打印扑克牌花色与点数

【java-数据结构篇】神奇 ArrayList,一键打印扑克牌花色与点数
在这里插入图片描述
在这里插入图片描述


在这里插入图片描述


我的个人主页
我的专栏:Java-数据结构,希望能帮助到大家!!!点赞❤ 收藏❤

前言:
在编程的奇妙世界里,数据结构如同精巧的积木,搭建起各类功能的大厦。而 ArrayList,作为其中一块极为实用的 “积木”,拥有着独特的魅力与强大的功能。
当我们将目光投向生活中的趣味场景 —— 扑克牌时,你或许想不到,ArrayList 能在其中大显身手。本书(或本文档)就将带你走进这个融合了技术与趣味的领域,一同探索如何运用 ArrayList 来实现扑克牌的打印。
无论是初涉编程的新手,渴望通过一个具体又有趣的项目开启编程之旅;还是已经在编程之路上奋进的学习者,想要深入理解数据结构在实际应用中的精妙之处;亦或是单纯对科技如何改变生活日常持有好奇心的朋友,在这里,你都能找到满足求知欲的内容。我们将从基础的 ArrayList 知识讲起,逐步深入到扑克牌打印的每一个细节,包括算法设计、代码实现,见证数字世界里扑克牌的 “诞生” 过程,开启这场知识与乐趣交织的探索吧。

一:实现打印扑克牌

相关代码:

packageArrayList;importjava.util.ArrayList;//这个类对象表示一张扑克牌classCard{privateString suit;//表示花色privateString rank;//表示点数publicCard(String suit,String rank){this.suit = suit;this.rank = rank;}publicStringgetSuit(){return suit;}publicvoidsetSuit(String suit){this.suit = suit;}publicStringgetRank(){return rank;}publicvoidsetRank(String rank){this.rank = rank;}publicStringtoString(){return"("+this.suit+" "+this.rank+")";}}publicclass demo1 {publicstaticvoidmain(String[] args){//表示一副扑克牌ArrayList<Card> deck=createDeck();System.out.println(deck);}publicstaticArrayList<Card>createDeck(){//创建一副扑克牌ArrayList<Card> deck=newArrayList<>();String[] suits={"♥","♣","♦","♠"};for(String suit:suits){//在每个花色中生成对应点数的牌for(int i=2;i<=10;i++){Card card =newCard(suit,""+i); deck.add(card);}Card cardJ=newCard(suit,"J");Card cardQ=newCard(suit,"Q");Card cardK=newCard(suit,"K");Card cardA=newCard(suit,"A"); deck.add(cardJ); deck.add(cardQ); deck.add(cardK); deck.add(cardA);}return deck;}}

最终效果呈现:

在这里插入图片描述

二:实现洗牌效果

可以使用Java中标准库自带的包Collections,直接进行洗牌。

效果如下:

在这里插入图片描述


自己实现洗牌
相关代码:

publicstaticvoidshuffle(ArrayList<Card> deck){//把整个ArrayList从后往前遍历//针对每一次取到的一张牌,就生成一个随机下标,拿到当前位置的牌和随机位置下标的牌,进行交换。Random random=newRandom();for(int i=deck.size()-1;i>0;i--){int j= random.nextInt(deck.size());//交换两张牌位置Card tmp=newCard(deck.get(i).getSuit(),deck.get(i).getRank()); deck.set(i,deck.get(j)); deck.set(j,tmp);}}

效果如下

在这里插入图片描述

三:实现发牌

相关代码:

//发牌,假设有三个人,每个人五张牌ArrayList<ArrayList<Card>> hands=newArrayList<ArrayList<Card>>();//ArrayList<HandCard> handCards=new ArrayList<HandCard>();//先创建三个人手里的牌ArrayListfor(int i=0;i<3;i++){ArrayList<Card> hand=newArrayList<Card>(); hands.add(hand);}for(int i=0;i<5;i++){for(int j=0;j<3;j++){//发牌是轮流的过程ArrayList<Card> currentHand=hands.get(j);Card card=deck.remove(0); currentHand.add(card);}}//打印每个人的首牌for(int i=0;i<3;i++){System.out.println("第"+i+"个人的牌"+hands.get(i));}}

效果图:

在这里插入图片描述

四:全部代码

packageArrayList;importjava.util.ArrayList;importjava.util.Collections;importjava.util.Random;//每个玩家的手牌classHandCard{privateArrayList<Card> cards;}//这个类对象表示一张扑克牌classCard{privateString suit;//表示花色privateString rank;//表示点数publicCard(String suit,String rank){this.suit = suit;this.rank = rank;}publicStringgetSuit(){return suit;}publicvoidsetSuit(String suit){this.suit = suit;}publicStringgetRank(){return rank;}publicvoidsetRank(String rank){this.rank = rank;}publicStringtoString(){return"("+this.suit+" "+this.rank+")";}}publicclass demo1 {publicstaticvoidmain(String[] args){//表示一副扑克牌ArrayList<Card> deck=createDeck();System.out.println("原始的牌:"+deck);// Collections.shuffle(deck);shuffle(deck);System.out.println("洗牌之后:"+deck);//发牌,假设有三个人,每个人五张牌ArrayList<ArrayList<Card>> hands=newArrayList<ArrayList<Card>>();//ArrayList<HandCard> handCards=new ArrayList<HandCard>();//先创建三个人手里的牌ArrayListfor(int i=0;i<3;i++){ArrayList<Card> hand=newArrayList<Card>(); hands.add(hand);}for(int i=0;i<5;i++){for(int j=0;j<3;j++){//发牌是轮流的过程ArrayList<Card> currentHand=hands.get(j);Card card=deck.remove(0); currentHand.add(card);}}//打印每个人的首牌for(int i=0;i<3;i++){System.out.println("第"+i+"个人的牌"+hands.get(i));}}//自己实现洗牌publicstaticvoidshuffle(ArrayList<Card> deck){//把整个ArrayList从后往前遍历//针对每一次取到的一张牌,就生成一个随机下标,拿到当前位置的牌和随机位置下标的牌,进行交换。Random random=newRandom();for(int i=deck.size()-1;i>0;i--){int j= random.nextInt(deck.size());//交换两张牌位置Card tmp=newCard(deck.get(i).getSuit(),deck.get(i).getRank()); deck.set(i,deck.get(j)); deck.set(j,tmp);}}publicstaticArrayList<Card>createDeck(){//创建一副扑克牌ArrayList<Card> deck=newArrayList<>();String[] suits={"♥","♣","♦","♠"};for(String suit:suits){//在每个花色中生成对应点数的牌for(int i=2;i<=10;i++){Card card =newCard(suit,""+i); deck.add(card);}Card cardJ=newCard(suit,"J");Card cardQ=newCard(suit,"Q");Card cardK=newCard(suit,"K");Card cardA=newCard(suit,"A"); deck.add(cardJ); deck.add(cardQ); deck.add(cardK); deck.add(cardA);}return deck;}}

Read more

Flutter 组件 csv2json 适配鸿蒙 HarmonyOS 实战:高性能异构数据转换,构建 CSV 流式解析与全栈式数据映射架构

Flutter 组件 csv2json 适配鸿蒙 HarmonyOS 实战:高性能异构数据转换,构建 CSV 流式解析与全栈式数据映射架构

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net Flutter 组件 csv2json 适配鸿蒙 HarmonyOS 实战:高性能异构数据转换,构建 CSV 流式解析与全栈式数据映射架构 前言 在鸿蒙(OpenHarmony)生态迈向工业数字化、涉及海量历史报表同步、离线数据采集及跨系统异构数据对齐的背景下,如何实现一种既能处理超大规模文本、又能保障转换极速且具备“非阻塞”特性的数据清洗方案,已成为决定应用数据吞吐能力与内存稳健性的核心因素。在鸿蒙设备这类强调 AOT 极致性能与受限内存足迹的环境下,如果应用依然采用原始的循环分割或同步全量加载 CSV,由于由于数据规模的膨胀,极易由于由于“内存瞬时爆表”导致鸿蒙应用的任务栈卡死。 我们需要一种能够流式处理(Streaming)、支持自动化字段映射(Auto-mapping)且具备零样板代码特性的转换方案。 csv2json 为 Flutter 开发者引入了“数据流变幻”范式。它将结构松散的 CSV 文本精确轰击为高维度的 JSON

By Ne0inhk
MySQL 动态分区管理:自动化与优化实践

MySQL 动态分区管理:自动化与优化实践

个人名片 🎓作者简介:java领域优质创作者 🌐个人主页:码农阿豪 📞工作室:新空间代码工作室(提供各种软件服务) 💌个人邮箱:[[email protected]] 📱个人微信:15279484656 🌐个人导航网站:www.forff.top 💡座右铭:总有人要赢。为什么不能是我呢? * 专栏导航: 码农阿豪系列专栏导航 面试专栏:收集了java相关高频面试题,面试实战总结🍻🎉🖥️ Spring5系列专栏:整理了Spring5重要知识点与实战演练,有案例可直接使用🚀🔧💻 Redis专栏:Redis从零到一学习分享,经验总结,案例实战💐📝💡 全栈系列专栏:海纳百川有容乃大,可能你想要的东西里面都有🤸🌱🚀 目录 * MySQL 动态分区管理:自动化与优化实践 * 一、分区的基本概念 * 二、动态分区的需求 * 三、使用存储过程动态创建分区 * 四、使用事件调度器自动化分区管理 * 五、避免分区冲突

By Ne0inhk

一文读懂Spring AOP:手把手教你优雅实现“无侵入”代码增强

目录 1.什么是Spring AOP? 2.SpringAOP优点与上手 Spring AOP 的核心术语 3.通知类型注解 4.@PointCut+@Order 5.切点表达式 6.代理模式 7.Spring AOP原理 1.什么是Spring AOP? AOP=>面向切片编程思想,是一种对一类问题集中处理的思想,比如拦截器,统一返回结果管理,统一异常处理,登录校验......如果使用OOP(面向结果编程)会让相同的代码重复多次出现,业务方法中混杂着非核心的逻辑。 Spring AOP就是为了解决这些问题存在,是AOP思想的其中一种实现方式 2.SpringAOP优点与上手 优点: * 不影响原有代码,解耦 * 便于维护功能 * 提高开发效率 * 减少重复代码 快速上手SpringAOP 编写一个使用SpringAOP计算所有方法的运行时长的例子 1.

By Ne0inhk

【Spring Boot】Spring Boot调用 WebService 接口的两种方式:动态调用 vs 静态调用 亲测有效

文章目录 * 前言 * 0、前提准备,添加依赖(Spring Boot + CXF) * 一、 方法一:动态调用 WebService(推荐用于调试) * 1. 添加依赖(Spring Boot + CXF) * 2、调用示例代码 * 3、注意事项 * 二、方法二:静态调用 WebService(推荐用于生产) * 1. 添加依赖(Spring Boot + CXF) * 2、获取 WSDL 文件 * 3、使用 `wsimport` 生成 Java 类 * 1. 检查 `wsimport` 是否存在 * 2. 进入存放 `service.wsdl`

By Ne0inhk