【JAVA数据结构】简单洗牌算法——ArrayList(顺序表)使用实例

本文主要是介绍【JAVA数据结构】简单洗牌算法——ArrayList(顺序表)使用实例,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

详细知识讲解请跳转:【JAVA数据结构】(ArrayList)顺序表-CSDN博客

一. 简单的洗牌算法

特殊知识须记:

List < List<E> >

该语法情况比较特殊,相当于一个“二维数组”存着一个个线性表的结构,如图

这是用于洗牌中三个人的牌分配

基本流程:

我们想实现的是一副牌(去鬼牌),三个人玩,每个人开始五张牌,轮流摸。

以上述图片为例:

 

 步骤一:设置牌类

先定义一个Card牌类,存放数字和花色

public class Card {public int rank;//数字public String suit;//花色//构造方法public Card(int rank, String suit) {this.rank = rank;this.suit = suit;}//重写toString,方便更好查看打印的数据@Overridepublic String toString() {return String.format("[%s,%d]",suit,rank);}}

步骤二:设置操作牌的类,实现买牌,洗牌,发牌操作:

  买牌
public class CardDemo {//固定一下花色public static final String[] SUITS = {"♠", "♥", "♣", "♦"};//买一副顺序完整的新牌public static List<Card> NewDeck(){//先设置好 52张空牌//设置大小为52的动态顺序表,存放类型为Card牌类List<Card> Deck = new ArrayList<>(52);//再将4个花色和13种数字的数据依次填到牌里for (int i = 0; i < SUITS.length; i++) {for (int j = 0; j <= 13 ; j++) {//分别用数值接收数字和花色int rank = j;String suit = SUITS[i];//将得到的数据存到一张卡牌上Card card = new Card(rank,suit);//在空牌添加一组卡牌数据Deck.add(card);}}//注意返回值!return Deck;}
  洗牌
//随机洗牌//随机交换牌public static void swap(List<Card> cards,int i ,int r){Card tmp = cards.get(i);//i下标的值设置为r下标所对应的数cards.set(i,cards.get(r));//同上,r下标的值设置为 i下标所对应的数cards.set(r,tmp);}public static void Shuffle (List<Card> deck){// i是顺序表的数所对应的下标//从后开始随机遍历(从i=0开始随机范围无法达到整个数组)for (int i = deck.size()-1; i > 0; i--) {Random random = new Random();//随机在0~i以内的下标值int r = random.nextInt(i);//将随机的下标对应的数 和 i下标的数 交换位置swap(deck,i,r);}}
  发牌 
    public static void main(String[] args) {//整理好新牌List<Card> New = NewDeck();System.out.println(New);//洗牌Shuffle(New);System.out.println(New);//发牌//三人轮流拿牌,一人五张List<List<Card>> hands = new ArrayList<>();//三个人各自手中的牌List<Card> hand1 = new ArrayList<>();List<Card> hand2 = new ArrayList<>();List<Card> hand3 = new ArrayList<>();hands.add(hand1);hands.add(hand2);hands.add(hand3);//每个人拿5张for (int i = 0; i < 5 ; i++) {//每次三个人每人拿一张牌for (int j = 0; j < 3; j++) {//每次拿掉第一张牌的数据Card card = New.remove(0);//将第一张牌数据给此时这个人手中hands.get(j).add(card);}}//打印分完牌之后每个人手中的牌System.out.println("第一个人:" + hands.get(0));System.out.println("第二个人:" + hands.get(1));System.out.println("第三个人:" + hands.get(2));System.out.println("剩下的牌:" + New);}

 运行结果

二. 杨辉三角

这篇关于【JAVA数据结构】简单洗牌算法——ArrayList(顺序表)使用实例的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1141826

相关文章

Linux使用fdisk进行磁盘的相关操作

《Linux使用fdisk进行磁盘的相关操作》fdisk命令是Linux中用于管理磁盘分区的强大文本实用程序,这篇文章主要为大家详细介绍了如何使用fdisk进行磁盘的相关操作,需要的可以了解下... 目录简介基本语法示例用法列出所有分区查看指定磁盘的区分管理指定的磁盘进入交互式模式创建一个新的分区删除一个存

C#使用HttpClient进行Post请求出现超时问题的解决及优化

《C#使用HttpClient进行Post请求出现超时问题的解决及优化》最近我的控制台程序发现有时候总是出现请求超时等问题,通常好几分钟最多只有3-4个请求,在使用apipost发现并发10个5分钟也... 目录优化结论单例HttpClient连接池耗尽和并发并发异步最终优化后优化结论我直接上优化结论吧,

SpringBoot使用Apache Tika检测敏感信息

《SpringBoot使用ApacheTika检测敏感信息》ApacheTika是一个功能强大的内容分析工具,它能够从多种文件格式中提取文本、元数据以及其他结构化信息,下面我们来看看如何使用Ap... 目录Tika 主要特性1. 多格式支持2. 自动文件类型检测3. 文本和元数据提取4. 支持 OCR(光学

Java内存泄漏问题的排查、优化与最佳实践

《Java内存泄漏问题的排查、优化与最佳实践》在Java开发中,内存泄漏是一个常见且令人头疼的问题,内存泄漏指的是程序在运行过程中,已经不再使用的对象没有被及时释放,从而导致内存占用不断增加,最终... 目录引言1. 什么是内存泄漏?常见的内存泄漏情况2. 如何排查 Java 中的内存泄漏?2.1 使用 J

JAVA系统中Spring Boot应用程序的配置文件application.yml使用详解

《JAVA系统中SpringBoot应用程序的配置文件application.yml使用详解》:本文主要介绍JAVA系统中SpringBoot应用程序的配置文件application.yml的... 目录文件路径文件内容解释1. Server 配置2. Spring 配置3. Logging 配置4. Ma

利用Python编写一个简单的聊天机器人

《利用Python编写一个简单的聊天机器人》这篇文章主要为大家详细介绍了如何利用Python编写一个简单的聊天机器人,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 使用 python 编写一个简单的聊天机器人可以从最基础的逻辑开始,然后逐步加入更复杂的功能。这里我们将先实现一个简单的

Linux使用dd命令来复制和转换数据的操作方法

《Linux使用dd命令来复制和转换数据的操作方法》Linux中的dd命令是一个功能强大的数据复制和转换实用程序,它以较低级别运行,通常用于创建可启动的USB驱动器、克隆磁盘和生成随机数据等任务,本文... 目录简介功能和能力语法常用选项示例用法基础用法创建可启动www.chinasem.cn的 USB 驱动

Java 字符数组转字符串的常用方法

《Java字符数组转字符串的常用方法》文章总结了在Java中将字符数组转换为字符串的几种常用方法,包括使用String构造函数、String.valueOf()方法、StringBuilder以及A... 目录1. 使用String构造函数1.1 基本转换方法1.2 注意事项2. 使用String.valu

C#使用yield关键字实现提升迭代性能与效率

《C#使用yield关键字实现提升迭代性能与效率》yield关键字在C#中简化了数据迭代的方式,实现了按需生成数据,自动维护迭代状态,本文主要来聊聊如何使用yield关键字实现提升迭代性能与效率,感兴... 目录前言传统迭代和yield迭代方式对比yield延迟加载按需获取数据yield break显式示迭

使用SQL语言查询多个Excel表格的操作方法

《使用SQL语言查询多个Excel表格的操作方法》本文介绍了如何使用SQL语言查询多个Excel表格,通过将所有Excel表格放入一个.xlsx文件中,并使用pandas和pandasql库进行读取和... 目录如何用SQL语言查询多个Excel表格如何使用sql查询excel内容1. 简介2. 实现思路3