【Java--数据结构】“从扑克到程序:深入探讨洗牌算法的原理与魅力“

前言

以下是学习Java顺序表的一个实例应用———简单的洗牌算法。

欢迎关注个人主页:逸狼


创造不易,可以点点赞吗~

如有错误,欢迎指出~



目录

前言

定义每张扑克牌的属性

生成一副扑克牌(不包含大小王)

洗牌方法

发牌方法

发牌测试

结果


简单的洗牌算法

定义每张扑克牌的属性

package Demo;public class Card {public int rank;//数字public String suit;//花色public Card(int rank,String suit){this.rank=rank;this.suit=suit;}@Overridepublic String toString() {return "{" + suit + " "+ rank + '}';}
}

生成一副扑克牌(不包含大小王)

package Demo;import java.util.ArrayList;
import java.util.List;
import java.util.Random;public class Cards {//4个花色  13张牌public static final String[] suits={"♥","♠","♣","♦"};//生成一副牌52张  4*13 不包含大小王public List<Card> buyCard(){List<Card> cardList=new ArrayList<>();for (int i = 0; i < 4; i++) {for (int j = 0; j < 13; j++) {int rank=j;String suit=suits[i];Card card=new Card(rank,suit);cardList.add(card);//生成一张牌}}return cardList;}
}

洗牌方法

    //洗牌public void shuffle(List<Card> cardList){Random random=new Random();//让i=51,生成一个0~i的随机数,与i交换。i--,重复此过程,洗牌for (int i = cardList.size()-1;i>0; i--) {int randIndex= random.nextInt(i);//生成0~i的随机数放入randIndexswap(cardList,i,randIndex);}}//写一个交换方法,交换i和j下标的牌private void swap(List<Card> cardList,int i,int j){Card tmp=cardList.get(i);cardList.set(i,cardList.get(j));cardList.set(j,tmp);}

发牌方法

//三个人, 每个人轮流抓5张牌public void drawCard(List<Card> cardList){List<Card> hand1=new ArrayList<>();List<Card> hand2=new ArrayList<>();List<Card> hand3=new ArrayList<>();List<List<Card>>hands=new ArrayList<>();hands.add(hand1);hands.add(hand2);hands.add(hand3);for (int i = 0; i < 5; i++) {//i代表5张牌for (int j = 0; j < 3; j++) {//j代表3个人Card card=cardList.remove(0);    //怎么抓牌? 每次删除0下标的牌hands.get(j).add(card);//hands.get(0)=hand1,以此类推}}System.out.println("第1个人的牌:"+hand1);System.out.println("第2个人的牌:"+hand2);System.out.println("第3个人的牌:"+hand3);}

发牌测试

package Demo;import java.util.List;public class TestCard {public static void main(String[] args) {Cards cards=new Cards();List<Card> cardList=cards.buyCard();System.out.println("生成一副扑克牌:");System.out.println(cardList);cards.shuffle(cardList);System.out.println("洗牌后:");System.out.println(cardList);System.out.println("抓牌:");cards.drawCard(cardList);System.out.println("剩下的牌:");System.out.println(cardList);}
}

结果

生成一副扑克牌:
[{♥ 0}, {♥ 1}, {♥ 2}, {♥ 3}, {♥ 4}, {♥ 5}, {♥ 6}, {♥ 7}, {♥ 8}, {♥ 9}, {♥ 10}, {♥ 11}, {♥ 12}, {♠ 0}, {♠ 1}, {♠ 2}, {♠ 3}, {♠ 4}, {♠ 5}, {♠ 6}, {♠ 7}, {♠ 8}, {♠ 9}, {♠ 10}, {♠ 11}, {♠ 12}, {♣ 0}, {♣ 1}, {♣ 2}, {♣ 3}, {♣ 4}, {♣ 5}, {♣ 6}, {♣ 7}, {♣ 8}, {♣ 9}, {♣ 10}, {♣ 11}, {♣ 12}, {♦ 0}, {♦ 1}, {♦ 2}, {♦ 3}, {♦ 4}, {♦ 5}, {♦ 6}, {♦ 7}, {♦ 8}, {♦ 9}, {♦ 10}, {♦ 11}, {♦ 12}]
洗牌后:
[{♦ 9}, {♠ 9}, {♥ 7}, {♥ 4}, {♠ 4}, {♥ 0}, {♥ 10}, {♣ 7}, {♠ 6}, {♥ 5}, {♣ 4}, {♥ 1}, {♠ 1}, {♥ 11}, {♦ 3}, {♦ 1}, {♥ 2}, {♣ 10}, {♣ 1}, {♣ 0}, {♣ 2}, {♥ 12}, {♦ 4}, {♥ 8}, {♣ 9}, {♠ 11}, {♠ 12}, {♣ 5}, {♦ 12}, {♠ 0}, {♠ 7}, {♦ 8}, {♦ 11}, {♦ 2}, {♠ 5}, {♥ 3}, {♣ 12}, {♥ 9}, {♣ 3}, {♦ 5}, {♦ 0}, {♠ 8}, {♦ 10}, {♠ 2}, {♦ 7}, {♠ 10}, {♠ 3}, {♥ 6}, {♦ 6}, {♣ 8}, {♣ 11}, {♣ 6}]
抓牌:
第1个人的牌:[{♦ 9}, {♥ 4}, {♥ 10}, {♥ 5}, {♠ 1}]
第2个人的牌:[{♠ 9}, {♠ 4}, {♣ 7}, {♣ 4}, {♥ 11}]
第3个人的牌:[{♥ 7}, {♥ 0}, {♠ 6}, {♥ 1}, {♦ 3}]
剩下的牌:
[{♦ 1}, {♥ 2}, {♣ 10}, {♣ 1}, {♣ 0}, {♣ 2}, {♥ 12}, {♦ 4}, {♥ 8}, {♣ 9}, {♠ 11}, {♠ 12}, {♣ 5}, {♦ 12}, {♠ 0}, {♠ 7}, {♦ 8}, {♦ 11}, {♦ 2}, {♠ 5}, {♥ 3}, {♣ 12}, {♥ 9}, {♣ 3}, {♦ 5}, {♦ 0}, {♠ 8}, {♦ 10}, {♠ 2}, {♦ 7}, {♠ 10}, {♠ 3}, {♥ 6}, {♦ 6}, {♣ 8}, {♣ 11}, {♣ 6}]
 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/2981066.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

软件测试之【软件测试概论二】

读者大大们好呀&#xff01;&#xff01;!☀️☀️☀️ &#x1f525; 欢迎来到我的博客 &#x1f440;期待大大的关注哦❗️❗️❗️ &#x1f680;欢迎收看我的主页文章➡️寻至善的主页 文章目录 前言软件测试模型瀑布模型V模型W&#xff08;双V&#xff09;模型测试活动 软…

ElasticSearch总结二

正向索引和倒排索引&#xff1a; 正向索引&#xff1a; 比方说我这里有一张数据库表&#xff0c;那我们知道对于数据库它一般情况下都会基于i d去创建一个索引&#xff0c;然后形成一个b树。 那么你根据i d进行检索的速度&#xff0c;就会非常的快&#xff0c;那么这种方式的…

(N-151)基于微信小程序校园学生活动管理平台

开发工具&#xff1a;IDEA、微信小程序 服务器&#xff1a;Tomcat9.0&#xff0c; jdk1.8 项目构建&#xff1a;maven 数据库&#xff1a;mysql5.7 前端技术&#xff1a;vue、uniapp 服务端技术&#xff1a;springbootmybatisplus 本系统分微信小程序和管理后台两部分&am…

吴恩达深度学习笔记:深度学习的 实践层面 (Practical aspects of Deep Learning)1.6-1.8

目录 第一门课&#xff1a;第二门课 改善深层神经网络&#xff1a;超参数调试、正 则 化 以 及 优 化 (Improving Deep Neural Networks:Hyperparameter tuning, Regularization and Optimization)第一周&#xff1a;深度学习的 实践层面 (Practical aspects of Deep Learning)…

【六十】【算法分析与设计】用一道题目解决dfs深度优先遍历,dfs中节点信息,dfs递归函数模板进入前维护出去前回溯,唯一解的剪枝飞升返回值true

路径之谜 题目描述 小明冒充X星球的骑士,进入了一个奇怪的城堡。 城堡里边什么都没有,只有方形石头铺成的地面。 假设城堡地面是nn个方格。如下图所示。 按习俗,骑士要从西北角走到东南角。可以横向或纵向移动,但不能斜着音走,也不能跳跃。每走到一个新方格,就要向正北 方和正西…

跨部门协作中的沟通困境与平台建设策略——以软硬件研发为例

一、背景 在科技行业&#xff0c;跨部门合作的重要性不言而喻&#xff0c;然而实际工作中&#xff0c;经常会遭遇沟通不畅的现象。以软件与硬件研发部门为例&#xff0c;两者在产品研发过程中经常需要紧密协作&#xff0c;但却时常出现信息传递障碍。当你试图阐述观点时&#…

01、创建型-单例模式--只有一个实例

文章目录 前言一、基本介绍1.1 什么是单例模式1.2 为什么要用单例模式1.3 应用场景1.4 单例优缺点 二、单例模式的实现方式2.1 饿汉式单例2.1.1 静态变量方式2.1.2 静态代码块 2.2 懒汉式单例2.2.1 懒汉式单例2.2.2 懒汉式优化①-线程安全2.2.2 懒汉式优化②-双重检查锁2.2.3 懒…

图书租赁系统-扣费服务

resources中添加moment.js文件。 然后引入moment.js文件&#xff1a; <script src"/js/moment.js"></script>借阅结束时间选完后changeDate事件&#xff1a; $("input[nameendTime]").datetimepicker({format: "yyyy-mm-dd hh:ii",…

分享基于鸿蒙OpenHarmony的Unity团结引擎应用开发赛

该赛题旨在鼓励更多开发者基于OpenHarmony4.x版本&#xff0c;使用团结引擎创造出精彩的游戏与应用。本次大赛分为“创新游戏”与“创新3D 化应用”两大赛道&#xff0c;每赛道又分“大众组”与“高校组”&#xff0c;让不同背景的开发者同台竞技。无论你是游戏开发者&#xff…

【NoC片上网络 On-Chip Network】应用程序的网络流量 合成网络流量

应用程序的网络流量 and 合成网络流量 1. 应用程序的网络流量 APPLICATION TRAFFIC2. 合成网络流量 SYNTHETIC TRAFFIC3. 合成网络流量的具体介绍 应用程序的网络流量 and 合成网络流量 1. 应用程序的网络流量 APPLICATION TRAFFIC 在 MPSoC(多处理器片上系统) 中&#xff…

网络安全之CSRFSSRF漏洞(上篇)(技术进阶)

目录 一&#xff0c;CSRF篇 二&#xff0c;认识什么是CSRF 三&#xff0c;实现CSRF攻击的前提 四&#xff0c;实战演练 【1】案例1 【2】案例2 【3】案例3 【4】案例4&#xff08;metinfo&#xff09; 一&#xff0c;CSRF篇 二&#xff0c;认识什么是CSRF CSRF&#x…

使用ollama部署llama3-8B

windows系统 安装ollama教程如下&#xff1a;https://juejin.cn/post/7359821944147722280 如果你不仅仅满足于本地自己调试&#xff0c;还希望同事也能够访问 那么按照下面步骤走&#xff08;windows系统&#xff09; set OLLAMA_HOST0.0.0.0 ollama serve然后同一个局域网下…

uniapp app权限说明弹框2024.4.23更新

华为上架被拒绝 用uni-app开发的app&#xff0c;上架华为被拒&#xff0c;问题如下&#xff1a; 您的应用在运行时&#xff0c;未见向用户告知权限申请的目的&#xff0c;向用户索取&#xff08;电话、相机、存储&#xff09;等权限&#xff0c;不符合华为应用市场审核标准。…

图解《图搜索算法》及代码实现

关注我&#xff0c;持续分享逻辑思维&管理思维&#xff1b; 可提供大厂面试辅导、及定制化求职/在职/管理/架构辅导&#xff1b; 有意找工作的同学&#xff0c;请参考博主的原创&#xff1a;《面试官心得--面试前应该如何准备》&#xff0c;《面试官心得--面试时如何进行自…

晶圆制造之MPW(多项目晶圆)简介

01、MPW是什么&#xff1f; 在半导体行业中&#xff0c;MPW 是 "Multi Project Wafer" 的缩写&#xff0c;中文意思是多项目晶圆。MPW 的主要思想是将使用相同工艺的多个集成电路设计放在同一晶圆片上进行流片&#xff08;即制造&#xff09;。这种方法允许多个设计共…

维基百科、百度百科和搜狗百科词条的创建流程

随着网络的发展&#xff0c;百度百科、搜狗百科、维基百科等百科网站已经成为大众获取知识的重要途径。因为百科具有得天独厚的平台优势&#xff0c;百科上的信息可信度高&#xff0c;权威性强。所以百科平台也成为商家的必争之地。这里小马识途聊聊如何创建百度百科、搜狗百科…

机器学习模型效果不好及其解决办法

当训练出来的机器学习模型效果不佳时&#xff0c;可能涉及多个方面的原因。为了改善模型的效果&#xff0c;需要系统地检查和分析问题的根源&#xff0c;并采取相应的措施进行优化。 一、数据问题 数据质量 检查数据是否干净、完整&#xff0c;是否存在噪声、异常值或缺失值。…

BBS前后端混合项目--01

总路由 # urls.py """BBS1 URL ConfigurationThe urlpatterns list routes URLs to views. For more information please see:https://docs.djangoproject.com/en/3.2/topics/http/urls/ Examples: Function views1. Add an import: from my_app import views2…

python绘图时渐变的处理——以一个扇形图的渐变为例

python绘图时渐变的处理——以一个扇形图的渐变为例 使用matplotlib绘制扇形的圆环 from matplotlib.patches import Wedge wedgeWedge((0,0),1,0,60,width0.3,colorred) wedge.set_edgecolor(k) fig,axplt.subplots(1,1) ax.add_patch(wedge) # 设置坐标轴的比例 plt.axis(e…

学习Rust第14天:HashMaps

今天我们来看看Rust中的hashmaps&#xff0c;在 std::collections crate中可用&#xff0c;是存储键值对的有效数据结构。本文介绍了创建、插入、访问、更新和迭代散列表等基本操作。通过一个计算单词出现次数的实际例子&#xff0c;我们展示了它们在现实世界中的实用性。Hashm…