【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://www.hqwc.cn/news/643763.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

开发区块链DApp应用,引领数字经济新潮流

随着区块链技术的飞速发展&#xff0c;分布式应用&#xff08;DApp&#xff09;正成为数字经济中的一股强劲力量。DApp以其去中心化、透明公正的特点&#xff0c;为用户带来了全新的数字体验&#xff0c;开创了数字经济的新潮流。作为一家专业的区块链DApp应用开发公司&#xf…

Linux内核之hook机制:call_void_hook用法实例(六十一)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

在线音乐播放网站项目测试(selenium+Junit5)

在做完在线音乐播放网站项目之后&#xff0c;需要对项目的功能、接口进行测试&#xff0c;利用测试的工具&#xff1a;selenium以及Java的单元测试工具Junit进行测试&#xff0c;下面式测试的思维导图&#xff0c;列出该项目需要测试的所有测试用例&#xff1a; 测试结果&#…

友盟+|如何通过阿里云 Flink+Paimon 实现流式湖仓落地方案

01 友盟介绍 友盟 以“数据智能&#xff0c;驱动业务增长”为使命&#xff0c;为移动应用开发者和企业提供包括统计分析、性能监测、消息推送、智能认证等一站式解决方案。截止 2023 年 6 月&#xff0c;已累计为 270 万移动应用和 980 万家网站&#xff0c;提供十余年的专业数…

Python自学之路--001:Python + PyCharm安装图文详解教程

目录 1、概述 2、Python解释器 2.1、下载 2.2、Python安装 2.3、Python环境变量配置&#xff0c;必选项 3、PyCharm安装 3.1、PyCharm下载 3.2、PyCharm安装 4、建一个Hello World 5、Phcarm设置 5.1、Phcarm汉化 5.2、Phcarm工具栏显示在顶部 5.3、Phcarm通过pip安…

【服务器部署篇】Linux下Ansible安装和配置

作者介绍&#xff1a;本人笔名姑苏老陈&#xff0c;从事JAVA开发工作十多年了&#xff0c;带过刚毕业的实习生&#xff0c;也带过技术团队。最近有个朋友的表弟&#xff0c;马上要大学毕业了&#xff0c;想从事JAVA开发工作&#xff0c;但不知道从何处入手。于是&#xff0c;产…

用这个方法,让你轻松从零搭建产品知识库

在市场竞争日益激烈的今天&#xff0c;一个系统化的产品知识库对于企业的重要性不言而喻。它不仅可以帮助团队成员快速掌握产品信息&#xff0c;提升服务效率&#xff0c;还能为客户提供及时准确的产品支持。那么&#xff0c;怎样才能从零开始&#xff0c;轻松搭建起一个合适的…

WebServer项目介绍文章【四叶专属】

Linux项目实战C轻量级Web服务器源码分析TinyWebServer 书接上文&#xff0c;学习开源项目的笔记没想到居然有不少阅读量&#xff0c;后面结合另一个前端开源项目简单做了点修改&#xff0c;没想到居然有需要的同学&#xff0c;那么我就专门为四叶开一篇文章吧&#xff0c;【源码…

探索未来的区块链DApp应用,畅享数字世界的无限可能

随着区块链技术的飞速发展&#xff0c;分布式应用&#xff08;DApp&#xff09;正成为数字经济中的一股强劲力量。DApp以其去中心化、透明公正的特点&#xff0c;为用户带来了全新的数字体验&#xff0c;开创了数字经济的新潮流。作为一家专业的区块链DApp应用开发公司&#xf…

BERT-CRF 微调中文 NER 模型

文章目录 数据集模型定义数据集预处理BIO 标签转换自定义Dataset拆分训练、测试集 训练验证、测试指标计算推理其它相关参数CRF 模块 数据集 CLUE-NER数据集&#xff1a;https://github.com/CLUEbenchmark/CLUENER2020/blob/master/pytorch_version/README.md 模型定义 imp…

VulnHub靶机 DC-8 打靶实战 详细渗透过程

VulnHub靶机 DC-8 打靶 详细渗透过程 目录 VulnHub靶机 DC-8 打靶 详细渗透过程一、将靶机配置导入到虚拟机当中二、渗透测试流程主机发现端口扫描Web渗透SQL注入登录后台反弹shell提权 一、将靶机配置导入到虚拟机当中 靶机地址&#xff1a; https://www.vulnhub.com/entry/…

人工智能时代的关键技术:深入探索向量数据库及其在AI中的应用

文章目录 1. 理解向量数据库&#xff1a;二维模型示例2. 向量数据库中的数据存储与检索3. 向量数据库如何工作&#xff1f;4. 向量数据库如何知道哪些向量相似&#xff1f; 在人工智能技术日益成熟的当下&#xff0c;向量数据库作为处理和检索高维数据的关键工具&#xff0c;对…