当前位置: 首页 > news >正文

简单洗牌算法

 🎉欢迎大家收看,请多多支持🌹

🥰关注小哇,和我一起成长🚀个人主页🚀

⭐目前主更 专栏Java ⭐数据结构

⭐已更专栏有C语言、计算机网络⭐


在学习了ArrayList之后,我们可以通过写一个洗牌算法来练习练习。

一副扑克牌是由花色和数字及字母组成,我们这里用1~13的数字来代替所有字母和数字

我们用一个Card类来定义一个简单的扑克牌模型,包含两个成员变量来表示花色和数字,一个成员方法重写了toString方法 用于返回扑克牌卡片信息,还包含一个构造方法来给两个成员变量赋值:

public class Card {public String suit;public int rank;public Card(String suit, int rank) {this.suit = suit;this.rank = rank;}@Overridepublic String toString() {return "{" + suit + rank + '}';}
}

再定义一个Game类来给扑克牌赋值、制作扑克牌、洗牌、发牌等操作。

用一个数组来存放花色:

 public static final String[] SUITS = {"♥","♠","♣","♦"};

 有了扑克牌花色之后,可以再利用循环给扑克牌添加数字:

    //制造扑克牌public List<Card> createCards(){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);cardList.add(card);}}Card card1 = new Card("Great King",1);Card card2 = new Card("Little King",1);cardList.add(card1);cardList.add(card2);return cardList;}

这里创建一个createCards()方法来制作扑克牌,并将扑克牌放进cardList列表中 ,通过双层循环制作了1~13的4种花色的牌。

然后再单独制作大小王并添加进cardList列表。

另外这里需要导入java.util.ArrayList和java.util.List两个包。

扑克牌制作好后,就该洗牌了。我们可以遍历每张牌,通过产生随机数让该下标的牌与遍历的牌交换,进而达到洗牌的效果。这里用到Random类,需要导包java.util.Random;

    //洗牌public void shuffle(List<Card> cardList){Random random = new Random();for(int i = cardList.size() - 1; i > 0; i--){int randIndex = random.nextInt(i);//产生0~ i-1 的随机数swap(cardList,i,randIndex);}}private void swap(List<Card> cardList, int i, int j){//交换两牌位置Card tmp = cardList.get(i);cardList.set(i,cardList.get(j));//把牌j放到牌i的位置cardList.set(j,tmp);//把牌i(tmp)放到牌j的位置}

扑克牌洗好之后,我们就可以玩牌了,我们制定一个简单规则,三个人玩牌,轮流抽一张牌,各抽5张:

 public List<List<Card>> play(List<Card> cardList){List<List<Card>> hand = new ArrayList<>();List<Card> hand0 = new ArrayList<>();List<Card> hand1 = new ArrayList<>();List<Card> hand2 = new ArrayList<>();hand.add(hand0);hand.add(hand1);hand.add(hand2);for(int i = 0; i < 5; i++){//每人各抽5张for(int j = 0; j < 3; j++){//3人轮流抽牌Card card = cardList.remove(0);//将抽到的牌取出hand.get(j).add(card);//谁抽的放谁手中}}return hand;}

我们再写一个Test类来测试以上代码,看看运行效果: 

import java.util.List;
public class Test {public static void main(String[] args) {Game game = new Game();List<Card> cardList = game.createCards();System.out.println("初始牌:" + cardList);game.shuffle(cardList);//洗牌System.out.println("洗过的牌:"+cardList);List<List<Card>> hand = game.play(cardList);for(int i = 0; i < hand.size();i++){System.out.println("第"+(i + 1)+"个人的牌是:"+hand.get(i));}System.out.println("剩下的牌:"+cardList);}
}

运行效果: 

通过这个简单的洗牌算法,让我更好理解到了如何在程序中引入随机性、背后的逻辑,频繁使用ArrayList加深了对这种动态数组的认识与理解。


🥰感谢支持~~ 💕

 

相关文章:

简单洗牌算法

&#x1f389;欢迎大家收看&#xff0c;请多多支持&#x1f339; &#x1f970;关注小哇&#xff0c;和我一起成长&#x1f680;个人主页&#x1f680; ⭐目前主更 专栏Java ⭐数据结构 ⭐已更专栏有C语言、计算机网络⭐ 在学习了ArrayList之后&#xff0c;我们可以通过写一个洗…...

JVM: 堆上的数据存储

文章目录 一、对象在堆中的内存布局1、对象在堆中的内存布局 - 标记字段2、JOL打印内存布局 二、元数据指针 一、对象在堆中的内存布局 对象在堆中的内存布局&#xff0c;指的是对象在堆中存放时的各个组成部分&#xff0c;主要分为以下几个部分&#xff1a; 1、对象在堆中的…...

AI产品经理的职责与能力:将AI技术转化为实际价值

一、AI产品经理的职责 发现和解决问题&#xff1a;AI产品经理需要具备敏锐的洞察力&#xff0c;能够发现用户需求和痛点&#xff0c;并提出相应的解决方案。传递价值给用户&#xff1a;AI产品经理需要确保产品能够满足用户的需求&#xff0c;提供价值&#xff0c;并提升用户体…...

【独家原创RIME-CNN-LSSVM】基于霜冰优化算法优化卷积神经网络(CNN)结合最小二乘向量机(LSSVM)的数据回归预测

【独家原创RIME-CNN-LSSVM】基于霜冰优化算法优化卷积神经网络(CNN)结合最小二乘向量机(LSSVM)的数据回归预测 目录 【独家原创RIME-CNN-LSSVM】基于霜冰优化算法优化卷积神经网络(CNN)结合最小二乘向量机(LSSVM)的数据回归预测效果一览基本介绍程序设计参考资料 效果一览 基本…...

如何对B站的热门视频进行分析

1. 视频内容分析 主题和类型&#xff1a;确定视频的主题和类型&#xff08;如游戏、教育、生活、科技等&#xff09;&#xff0c;分析其是否符合当前流行趋势或特定兴趣群体。内容创意&#xff1a;评估视频内容的创意性和原创性&#xff0c;是否具有吸引力和独特性。内容质量&…...

MobaXterm tmux 配置妥当

一、事出有因 缘由&#xff1a;接上篇文章&#xff0c;用Docker搭建pwn环境后&#xff0c;用之前学过的多窗口tmux进行调试程序&#xff0c;但是鼠标滚动的效果不按预期上下翻屏。全网搜索很难找到有效解决办法&#xff0c;最后还是找到了一篇英文文章&#xff0c;解决了&…...

排序算法:快速排序,golang实现

目录 前言 快速排序 代码示例 1. 算法包 2. 快速排序代码 3. 模拟程序 4. 运行程序 5. 从大到小排序 快速排序的思想 快速排序的实现逻辑 1. 选择基准值 (Pivot) 2. 分区操作 (Partition) 3. 递归排序 循环次数测试 假如 10 条数据进行排序 假如 20 条数据进行…...

step:菜单栏静态加载和动态加载

文章目录 文章介绍静态加载动态加载补充材料 文章介绍 对比静态加载和动态加载。 主界面main.qml之前使用的是动态加载&#xff0c;动态加载导致的问题&#xff1a;菜单栏选择界面切换时&#xff0c;之前的界面内容被清空。 修改方法&#xff1a;将动态加载改为静态加载 左边是…...

【简历】武汉某985大学:前端简历指导,拿offer可能性低

注&#xff1a;为保证用户信息安全&#xff0c;姓名和学校等信息已经进行同层次变更&#xff0c;内容部分细节也进行了部分隐藏 简历说明 这是一份985武汉某大学25届的前端简历&#xff0c;那么985面向的肯定是大厂的层次&#xff0c;但是作为前端简历&#xff0c;学校部分&a…...

推荐系统的核心逻辑 MVP

我们将设计一个基于内容经济的推荐系统&#xff08;Minimum Viable Product, MVP&#xff09;。这个系统将通过收集用户行为数据&#xff0c;计算用户相似度&#xff0c;并生成个性化的推荐结果。推荐系统将包括数据收集、数据存储、数据处理和推荐服务几个关键部分。 MVP功能…...

Java中的BIO,NIO与操作系统IO模型的区分

Java中的IO模型 Java中的BIO&#xff0c;NIO&#xff0c;AIO概念可以是针对输入输出流&#xff0c;文件&#xff0c;和网络编程等其他IO操作的。 但是主要还是在网络编程通信过程中比较重要&#xff0c;因为很多情况网络编程需要它们来提供更好的性能。 所以本篇文章偏向于网络…...

AI砸掉了这些人的饭碗

在一般打工人眼里&#xff0c;金融圈往往被认为是高端脑力工作者的聚集地&#xff0c;他们工资高&#xff0c;学历高&#xff0c;能力强&#xff0c;轻易无法被替代。 可最近&#xff0c;偏偏一个“非人类”的物种&#xff0c;要来抢他们的饭碗。相关报道称&#xff0c;华尔街…...

端口及对应服务

端口是计算机网络中用于区分不同服务的逻辑概念。每个端口号都是一个16位的数字&#xff0c;其取值范围从0到65535。端口号被分为以下几类&#xff1a; 公认端口&#xff08;Well-known ports&#xff09;&#xff1a;范围从0到1023&#xff0c;这些端口通常被分配给常见的服务…...

剑指offer题解合集——Week7day1[滑动窗口的最大值]

滑动窗口的最大值 题目描述 给定一个数组和滑动窗口的大小&#xff0c;请找出所有滑动窗口里的最大值。 例如&#xff0c;如果输入数组 [2,3,4,2,6,2,5,1] 及滑动窗口的大小 3 &#xff0c;那么一共存在 6 个滑动窗口&#xff0c;它们的最大值分别为 [4,4,6,6,6,5] 注意&am…...

深入解读财报,开启美股投资之旅

投资股票市场&#xff0c;尤其是美股市场&#xff0c;对于许多投资者来说是一项充满挑战的活动。然而&#xff0c;无论投资者是倾向于技术分析还是基本面分析&#xff0c;财报都是他们不可或缺的工具。本文将带领读者深入了解如何通过阅读和分析财报&#xff0c;发现潜在的投资…...

邦芒支招:成功找到工作要掌握的3个知识点

社会进步&#xff0c;企业商业竞争越来越激烈&#xff0c;不管身为一名职场小白或是想调换一下目前的工作的人&#xff0c;都想找到一个称心如意的好工作。拥有以下三点知识点&#xff0c;可以使我们找到工作。 1、迫不得已&#xff0c;别做这件事 拍桌子说“我不开了”的时候有…...

Educational Codeforces Round 168 (Rated for Div. 2)-7.30复盘

A. Strong Password 简单题&#xff0c;找到相同的两个相邻字母之间插一个跟他们不同的大写字母即可 inline void solve(){cin>>s;int id0;char hh ;for(int i1;i<s.size();i){if(s[i-1]s[i]){idi;break;}} for(int i0;i<26;i){if(s[id]!ai&&s[id1]!ai) …...

Web开发:小结Apache Echarts官网上常用的配置项(前端可视化图表)

目录 一、须知 二、Title 三、 Legend 四、Grid 一、须知 配置项官方文档&#xff1a;点此进入。 我总结了比较常用的功能&#xff0c;写进注释里面&#xff0c;附带链接分享和效果图展示。&#xff08;更新中....&#xff09; 二、Title option {title: {text: Weekl…...

B树的平衡性与性能优化

B树的平衡性与性能优化 B树&#xff08;B-tree&#xff09;是一种自平衡的树数据结构&#xff0c;广泛应用于数据库和文件系统中&#xff0c;用于保持数据的有序性并允许高效的插入、删除和查找操作。B树能够很好地处理大规模数据&#xff0c;并在磁盘I/O操作中表现出色。本文…...

llama3源码解读之推理-infer

文章目录 前言一、整体源码解读1、完整main源码2、tokenizer加载3、llama3模型加载4、llama3测试数据文本加载5、llama3模型推理模块1、模型推理模块的数据处理2、模型推理模块的model.generate预测3、模型推理模块的预测结果处理6、多轮对话二、llama3推理数据处理1、完整数据…...

【教程】Linux安装Redis步骤记录

下载地址 Index of /releases/ Downloads - Redis 安装redis-7.4.0.tar.gz 1.下载安装包 wget https://download.redis.io/releases/redis-7.4.0.tar.gz 2.解压 tar -zxvf redis-7.4.0.tar.gz 3.进入目录 cd redis-7.4.0/ 4.编译 make 5.安装 make install PREFIX/u…...

全球汽车线控制动系统市场规模预测:未来六年CAGR为17.3%

引言&#xff1a; 随着汽车行业的持续发展和对安全性能需求的增加&#xff0c;汽车线控制动系统作为提升车辆安全性和操控性的关键组件&#xff0c;正逐渐受到市场的广泛关注。本文旨在通过深度分析汽车线控制动系统行业的各个维度&#xff0c;揭示行业发展趋势和潜在机会。 【…...

Ubuntu运行深度学习代码,代码随机epoch中断没有任何报错

深度学习运行代码直接中断 文章目录 深度学习运行代码直接中断问题描述设备信息问题补充解决思路问题发现及正确解决思路新问题出现最终问题&#xff1a;ubuntu系统&#xff0c;4090显卡安装英伟达驱动535.x外的驱动会导致开机无法进入桌面问题记录 问题描述 运行深度学习代码…...

只有4%知道的Linux,看了你也能上手Ubuntu桌面系统,Ubuntu简易设置,源更新,root密码,远程服务...

创作不易 只因热爱!! 热衷分享&#xff0c;一起成长! “你的鼓励就是我努力付出的动力” 最近常提的一句话&#xff0c;那就是“但行好事&#xff0c;莫问前程"! 与辉同行的董工说​&#xff1a;​守正出奇。坚持分享&#xff0c;坚持付出&#xff0c;坚持奉献&#xff0c…...

Tomcat部署——个人笔记

Tomcat部署——个人笔记 文章目录 [toc]简介安装配置文件WEB项目的标准结构WEB项目部署IDEA中开发并部署运行WEB项目 本学习笔记参考尚硅谷等教程。 简介 Apache Tomcat 官网 Tomcat是Apache 软件基金会&#xff08;Apache Software Foundation&#xff09;的Jakarta 项目中…...

常见且重要的用户体验原则

以下是一些常见且重要的用户体验原则&#xff1a; 1. 以用户为中心 - 深入了解用户的需求、期望、目标和行为习惯。通过用户研究、调查、访谈等方法获取真实的用户反馈&#xff0c;以此来设计产品或服务。 - 例如&#xff0c;在设计一款老年手机时&#xff0c;充分考虑老年…...

web基础及nginx搭建

第四周 上午 静态资源 根据开发者保存在项目资源目录中的路径访问静态资源 html 图片 js css 音乐 视频 f12 &#xff0c;开发者工具&#xff0c;网络 1 、 web 基本概念 web 服务器&#xff08; web server &#xff09;&#xff1a;也称 HTTP 服务器&#xff08; HTTP …...

C++ 布隆过滤器

1. 布隆过滤器提出 我们在使用新闻客户端看新闻时&#xff0c;它会给我们不停地推荐新的内容&#xff0c;它每次推荐时要去重&#xff0c;去掉 那些已经看过的内容。问题来了&#xff0c;新闻客户端推荐系统如何实现推送去重的&#xff1f; 用服务器记录了用 户看过的所有历史…...

使用HTML创建用户注册表单

在当今数字化时代&#xff0c;网页表单对于收集用户信息和促进网站交互至关重要。无论您设计简单的注册表单还是复杂的调查表&#xff0c;了解HTML的基础知识可以帮助您构建有效的用户界面。在本教程中&#xff0c;我们将详细介绍如何使用HTML创建基本的用户注册表单。 第一步…...

Python零基础入门教程

Python零基础详细入门教程可以从以下几个方面进行学习和掌握&#xff1a; 一、Python基础认知 1. Python简介 由来与发展&#xff1a;Python是一种广泛使用的高级编程语言&#xff0c;由Guido van Rossum&#xff08;吉多范罗苏姆&#xff09;于1991年首次发布。Python以其简…...

政府网站建设需求方案/中国目前最好的搜索引擎

随便拿一个搜索引擎搜索一下“两列自适应布局”&#xff0c;都能得到很多种实现方法&#xff0c;这篇文章的重点是这些方法的底层逻辑是什么&#xff0c;他们是怎么得来的。 分析&#xff1a; 需要满足三个要求&#xff1a; ①两个盒子在同一行 ②右边的盒子需要占满剩下的空间…...

京东网站建设步骤/广东云浮疫情最新情况

全球最厉害的14位程序员都有哪些人&#xff1f;接下来让我们一起来看一下让业界膜拜的这十几位顶级编程大神。 注意&#xff0c;排名不分先后。 01 Jon Skeet 个人名望&#xff1a;程序技术问答网站Stack Overflow总排名第一的大神&#xff0c;每月的问答量保持在425个左右。 …...

杭州商城型网站建设/怎么样自己创建网站

在eclipse目录下建个批处理文件eclipse.bat,用文本编辑器打开,写入如下内容:eclipse.exe -vmargs -Xms128m -Xmx512m -XX:PermSize128m -XX:PermSize256m然后保存.以后运行eclipse的时候就执行这个批处理就行了.解释下参数的意思:-vmargs 说…...

猪八戒网做网站/seo百科大全

目前很多制造型企业开始进行数字化转型&#xff0c;嫁接了很多提高生产效率的设备&#xff0c;比如MES、ERP、SPC等系统。 这些数据能帮助企业看到当下正在发什么&#xff0c;比如在制品多少&#xff1f;库存多少&#xff1f;损耗多少&#xff1f;但是不能告诉企业为什么会形成…...

汝州网站建设/torrentkitty磁力猫

一、什么是LVM&#xff1a;LVM&#xff08;Logical Volume Manager&#xff09;LVM是逻辑盘卷管理&#xff08;Logical Volume Manager&#xff09;的简称&#xff0c;它是Linux环境下对磁盘分区进行管理的一种机制&#xff0c;LVM是建立在硬盘和分区之上的一个逻辑层&#xff…...

游戏网官网/怎样进行seo优化

无线网络发射器选址 题目描述 Description随着智能手机的日益普及&#xff0c;人们对无线网的需求日益增大。某城市决定对城市内的公共场所覆盖无线网。 假设该城市的布局为由严格平行的 129 条东西向街道和 129 条南北向街道所形成的网格状&#xff0c;并且相邻的平行街道之间…...