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

ArrayList——简单洗牌算法

特殊语法介绍:

List<List<E>>

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

该语法的灵活性强,可适用于多种类型和多种情况。接下来就使用该语法来实现一个简单的洗牌操作。

基本流程:

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

以上述图片为例:

1.先实现52张牌,设为买牌(BuyCard)操作,牌(Card)里面有不同花色(四种)和数字(假设J,Q,K)也为数字。可以另外定义花色,通过重写toString方法来实现打印为:【花色,数字】的形式

2.再实现洗牌操作,打乱顺序,这里得用到随机数方法:Random random = new Random();

打乱顺序的实现可以为,从后往前遍历,遍历的该位置与前面随机位置调换:

则洗牌操作就可以完成了。

3.再实现摸牌操作,需要使用remove操作(删除操作),将删除的牌放入各个人的卡槽,每人放五张牌。然后可以打印出来看效果如何

实现流程:

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

再有一个类,实现买牌,洗牌,发牌操作:

先看买牌操作:

牌定义好后,就有了一副牌,然后我们需要将其打乱,写出洗牌操作:

然后进行摸牌操作,每个玩家有着五个牌:

然后可以看看甲乙丙各持的牌,顺便打印剩下的牌:

这样我们的买牌,洗牌,发牌操作就全部完成啦!

上面就是简单的洗牌操作,后续我们可以研究出怎样玩牌打牌的操作,待我后续更新!

谢谢各位的观看!

附上测试代码:

test:

import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Random;public class Test {//简单洗牌算法public static void main(String[] args) {CardDemo carddemo = new CardDemo();System.out.println("买一副牌:");//买一副牌List<Card> card = carddemo.BuyCard();System.out.println(card);System.out.println("洗好一副牌:");//洗牌carddemo.Shuffle(card);System.out.println(card);System.out.println("确定好玩家,甲,乙,丙:");//执行发牌操作List<List<Card>> Player = carddemo.PlayCards(card);System.out.println("甲玩家的牌:");System.out.println(Player.get(0));System.out.println("乙玩家的牌:");System.out.println(Player.get(1));System.out.println("丙玩家的牌:");System.out.println(Player.get(2));System.out.println("剩下的牌:");System.out.println(card);}
}

Card:

//卡牌类
public class Card {private int rand;private String suit;public Card(int rand,String suit){this.rand = rand;this.suit = suit;}//重写toString方法public String toString() {return "[" +suit+rand +"] ";}
}

CardDemo:

import java.util.ArrayList;
import java.util.List;
import java.util.Random;public class CardDemo {private String[] SUIT = {"♦","♣","♥","♠"};//四个花色//买牌public List<Card> BuyCard(){//先定义52大小的动态顺序表,存放类型为牌类List<Card> ret = new ArrayList<>(52);//四个花色,十三张牌for (int i = 0; i < 4; i++) {for (int j = 1; j <= 13; j++) {ret.add(new Card(j,SUIT[i]));}}return ret;}//洗牌public void Shuffle(List<Card> C){Random random = new Random();//定义随机数//把范围给定到0~i区间,在前面取随机数来与当前i位换位置for (int i = C.size() - 1; i > 0 ; i--) {int flg = random.nextInt(i);//范围控制在0~i以内swap(C,i,flg);//交换牌}}//发牌(需要玩家和一副牌)public List<List<Card>> PlayCards(List<Card> C){List<List<Card>> player = new ArrayList<>();List<Card> play0 = new ArrayList<>(5);//玩家一的一副牌List<Card> play1 = new ArrayList<>(5);//玩家二的一副牌List<Card> play2 = new ArrayList<>(5);//玩家三的一副牌for (int i = 0; i < 5; i++) {//各个玩家抽取一轮牌,原牌会进行删除操作,抽取的是原牌第一张play0.add(C.remove(0));play1.add(C.remove(0));play2.add(C.remove(0));}player.add(play0);player.add(play1);player.add(play2);return player;}//交换牌位置private void swap(List<Card> C,int a,int b){Card wap = C.get(a);C.set(a,C.get(b));C.set(b,wap);}}

相关文章:

ArrayList——简单洗牌算法

特殊语法介绍&#xff1a; List<List<E>> 该语法情况比较特殊&#xff0c;相当于一个“二维数组”存着一个个线性表的结构&#xff0c;如图&#xff1a; 该语法的灵活性强&#xff0c;可适用于多种类型和多种情况。接下来就使用该语法来实现一个简单的洗牌操作。…...

springboot vue 开源 会员收银系统 (6) 收银台的搭建

前言 完整版演示 前面我们对会员系统 分类和商品的开发 完成了收银所需的基础信息 下面我们开始完成收银台的开发 简单画了一个收银的流程图大家参考下 从这张图我们可以分析一下几点 可以选择会员或散客收银选择会员使用相应的会员价结算使用会员卡则在价格基础根据卡折扣…...

重排和重绘的区别,什么情况下会触发这两种情况

重排&#xff08;Reflow&#xff09;和重绘&#xff08;Repaint&#xff09;是Web前端开发中关于浏览器渲染机制的两个核心概念。它们之间的主要区别以及触发条件如下&#xff1a; 重排&#xff08;Reflow&#xff09; 定义&#xff1a; 重排也称为布局&#xff08;Layout&a…...

亮点回顾|智能汽车芯片创新技术应用与质量研讨会

5月29日&#xff0c;2024汽车软件与通信大会——智能汽车芯片创新技术应用与质量研讨会在江苏苏州狮山国际会议中心举行。本次会议由中国中检所属中国汽车工程研究院股份有限公司&#xff08;简称&#xff1a;中国汽研&#xff09;主办&#xff0c;旨在为智能汽车芯片的技术创新…...

特征工程,减小过拟合

目录 特征工程 减小过拟合 图像增强方法 特征工程是机器学习和数据分析中不可或缺的一环,其重要性不言而喻。以下是关于特征工程的详细回答: 一、定义 特征工程是将原始数据转化为更好的表达问题本质的特征的过程,旨在发现对因变量y有明显影响作用的特征(通常称自变量…...

STM32-16-ADC

STM32-01-认识单片机 STM32-02-基础知识 STM32-03-HAL库 STM32-04-时钟树 STM32-05-SYSTEM文件夹 STM32-06-GPIO STM32-07-外部中断 STM32-08-串口 STM32-09-IWDG和WWDG STM32-10-定时器 STM32-11-电容触摸按键 STM32-12-OLED模块 STM32-13-MPU STM32-14-FSMC_LCD STM32-15-DMA…...

单例模式(C语言)

C语言的设计模式&#xff08;单例模式&#xff09; 单例模式&#xff08;Singleton Pattern&#xff09;是一种设计模式&#xff0c;目的是确保一个类只有一个实例&#xff0c;并提供一个全局访问点。 #include "stdio.h" #include "stdlib.h"// 定义一个…...

js前端格式化日期函数

开发需求 在前端中我们通常使用new Date()函数获取到的日期时间是下面这种样子&#xff1a;Thu Jun 06 2024 17:29:11 GMT0800 (中国标准时间)&#xff0c;我们想要把它转换成常见的指定格式&#xff0c;比如 年-月-日 时:分:秒年/月/日 时:分:秒年-月-日年/月/日 所以就封装…...

五个超实用的 ChatGPT-4o 提示词

GPT-4o 是 OpenAI 最近推出的最新人工智能模型&#xff0c;不仅具备大语言模型的能力&#xff0c;而且拥有多模态模型的看、读、说等能力&#xff0c;而且速度比 GPT-4 更快。下面我们就来介绍几个超实用的 GPT-4o 提示词&#xff0c;帮助大家更好地了解 GPT-4o 的功能和应用场…...

基于51单片机多功能防盗报警proteus仿真( proteus仿真+程序+设计报告+原理图+讲解视频)

基于51单片机多功能防盗报警系统 1. 主要功能&#xff1a;2. 讲解视频&#xff1a;3. 仿真4. 程序代码5. 设计报告6. 原理图7. 设计资料内容清单&&下载链接 基于51单片机多功能防盗报警系统( proteus仿真程序设计报告原理图讲解视频&#xff09; 仿真图proteus8.9及以上…...

gitee和github的协同

假设gitee上zhaodezan有一个开发库&#xff0c;但是从andeyeluguo上拉取最新的&#xff08;从github上同步过来最新的&#xff09; git remote add dbgpt_in_gitee https://gitee.com/andeyeluguo/DB-GPT.git remote -v git pull --rebase dbgpt_in_gitee main 有冲突可能需要…...

压力测试-性能指标-Jmeter使用-压力测试报告

文章目录 1.压测目的2.性能指标3.Jmeter3.1Jmeter使用3.1.1 运行Jmeter3.1.2 添加线程组3.1.3设置HTTP请求3.1.4 设置监视器 3.2 查看Jmeter压测结果3.2.1 查看结果树3.2.2 查看汇总报告3.2.3 查看聚合报告3.2.4 查看汇总图 1.压测目的 内存泄漏&#xff1a;OOM&#xff0c;重…...

通过Slf4j中的MDC实现在日志中添加用户IP功能

一、slf4j中MDC是什么 slf4j除了trace、debug、info、warn、error这几个日志接口外&#xff0c;还可以配合MDC将数据写入日志。换句话说MDC也是用来记录日志的&#xff0c;但它的使用方式与使用日志接口不同。 在使用日志接口时我们一般这么做 log.debug("log debug"…...

代码随想录算法训练营第四十九天| 139.单词拆分、背包问题总结

139.单词拆分 题目链接&#xff1a;139.单词拆分 文档讲解&#xff1a;代码随想录/单词拆分 视频讲解&#xff1a;视频讲解-单词拆分 状态&#xff1a;已完成&#xff08;0遍&#xff09; 解题过程 这几天博主忙着面试和入职&#xff0c;一晃已经周四了&#xff0c;这个礼拜…...

STM32F103VE和STM32F407VE的引脚布局

STM32F103VE vs STM32F407VE 引脚对比表 引脚 STM32F103VE STM32F407VE 备注 1 VSS VSS 地 2 VDD VDD 电源 3 VSSA VSSA 模拟地 4 VDDA VDDA 模拟电源 5 OSC_IN OSC_IN 外部时钟输入 6 OSC_OUT OSC_OUT 外部时钟输出 7 NRST NRST 复位 8 PC13 (GPIO) PC13 (GPIO) GPIO 9 PC14 (…...

搜维尔科技:使用 Xsens 动作捕捉技术创建栩栩如生的动画

使用Xsens 动作捕捉技术创建栩栩如生的动画 搜维尔科技&#xff1a;使用 Xsens 动作捕捉技术创建栩栩如生的动画...

鸿蒙开发 一 (三)、ArkTS开发实战上

ArkTS 从 TypeScript 优化而来&#xff0c; 但有些用法又不太一样&#xff0c; 在开发中&#xff0c; 经常会出现一些报错提示&#xff0c;下面我们也汇总一些常见错误&#xff0c;捡一些常见的整理一下 Promise 的用法&#xff1a; //TypeScript 写法&#xff1a;private load…...

TensorRT教程(1)初探TensorRT

1. TensorRT简要介绍 TensorRT&#xff08;NVIDIA TensorRT&#xff09;是 NVIDIA 开发的一个用于深度学习推理的高性能推理引擎。它可以针对 NVIDIA GPU 进行高效的深度学习推理加速&#xff0c;提供了许多优化技术&#xff0c;使得推理速度更快&#xff0c;并且可以在生产环境…...

多表连接查询和子查询

一、连接查询 连接查询是SQL语言最强大的功能之一&#xff0c;它可以执行查询时动态的将表连接起来&#xff0c;然后从中查询数据。 1.1、连接两表的方法 在SQL中连接两表可以有两种方法&#xff0c;一种是无连接规则连接&#xff0c;另一种是有连接规则连接。 无连接规则连…...

数据挖掘与机器学习——聚类算法

目录 无监督学习 聚类算法 概念&#xff1a; 功能&#xff1a; 应用场景&#xff1a; 评判标准&#xff1a; 划分聚类&#xff1a; K-means聚类 逻辑实现&#xff1a; 聚类方式 问题&#xff1a; 解决&#xff1a; 可能存在的问题&#xff1a; 1.初始值对K-means聚…...

idea大量爆红问题解决

问题描述 在学习和工作中&#xff0c;idea是程序员不可缺少的一个工具&#xff0c;但是突然在有些时候就会出现大量爆红的问题&#xff0c;发现无法跳转&#xff0c;无论是关机重启或者是替换root都无法解决 就是如上所展示的问题&#xff0c;但是程序依然可以启动。 问题解决…...

Linux链表操作全解析

Linux C语言链表深度解析与实战技巧 一、链表基础概念与内核链表优势1.1 为什么使用链表&#xff1f;1.2 Linux 内核链表与用户态链表的区别 二、内核链表结构与宏解析常用宏/函数 三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势5.1 插入效率5.2 安全…...

无法与IP建立连接,未能下载VSCode服务器

如题&#xff0c;在远程连接服务器的时候突然遇到了这个提示。 查阅了一圈&#xff0c;发现是VSCode版本自动更新惹的祸&#xff01;&#xff01;&#xff01; 在VSCode的帮助->关于这里发现前几天VSCode自动更新了&#xff0c;我的版本号变成了1.100.3 才导致了远程连接出…...

SCAU期末笔记 - 数据分析与数据挖掘题库解析

这门怎么题库答案不全啊日 来简单学一下子来 一、选择题&#xff08;可多选&#xff09; 将原始数据进行集成、变换、维度规约、数值规约是在以下哪个步骤的任务?(C) A. 频繁模式挖掘 B.分类和预测 C.数据预处理 D.数据流挖掘 A. 频繁模式挖掘&#xff1a;专注于发现数据中…...

《Playwright:微软的自动化测试工具详解》

Playwright 简介:声明内容来自网络&#xff0c;将内容拼接整理出来的文档 Playwright 是微软开发的自动化测试工具&#xff0c;支持 Chrome、Firefox、Safari 等主流浏览器&#xff0c;提供多语言 API&#xff08;Python、JavaScript、Java、.NET&#xff09;。它的特点包括&a…...

【算法训练营Day07】字符串part1

文章目录 反转字符串反转字符串II替换数字 反转字符串 题目链接&#xff1a;344. 反转字符串 双指针法&#xff0c;两个指针的元素直接调转即可 class Solution {public void reverseString(char[] s) {int head 0;int end s.length - 1;while(head < end) {char temp …...

2025 后端自学UNIAPP【项目实战:旅游项目】6、我的收藏页面

代码框架视图 1、先添加一个获取收藏景点的列表请求 【在文件my_api.js文件中添加】 // 引入公共的请求封装 import http from ./my_http.js// 登录接口&#xff08;适配服务端返回 Token&#xff09; export const login async (code, avatar) > {const res await http…...

TRS收益互换:跨境资本流动的金融创新工具与系统化解决方案

一、TRS收益互换的本质与业务逻辑 &#xff08;一&#xff09;概念解析 TRS&#xff08;Total Return Swap&#xff09;收益互换是一种金融衍生工具&#xff0c;指交易双方约定在未来一定期限内&#xff0c;基于特定资产或指数的表现进行现金流交换的协议。其核心特征包括&am…...

在WSL2的Ubuntu镜像中安装Docker

Docker官网链接: https://docs.docker.com/engine/install/ubuntu/ 1、运行以下命令卸载所有冲突的软件包&#xff1a; for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done2、设置Docker…...

selenium学习实战【Python爬虫】

selenium学习实战【Python爬虫】 文章目录 selenium学习实战【Python爬虫】一、声明二、学习目标三、安装依赖3.1 安装selenium库3.2 安装浏览器驱动3.2.1 查看Edge版本3.2.2 驱动安装 四、代码讲解4.1 配置浏览器4.2 加载更多4.3 寻找内容4.4 完整代码 五、报告文件爬取5.1 提…...