ArrayList——简单洗牌算法

2024-06-07 05:28
文章标签 算法 简单 arraylist 洗牌

本文主要是介绍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——简单洗牌算法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

基于Python实现一个简单的题库与在线考试系统

《基于Python实现一个简单的题库与在线考试系统》在当今信息化教育时代,在线学习与考试系统已成为教育技术领域的重要组成部分,本文就来介绍一下如何使用Python和PyQt5框架开发一个名为白泽题库系... 目录概述功能特点界面展示系统架构设计类结构图Excel题库填写格式模板题库题目填写格式表核心数据结构

C/C++ chrono简单使用场景示例详解

《C/C++chrono简单使用场景示例详解》:本文主要介绍C/C++chrono简单使用场景示例详解,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友... 目录chrono使用场景举例1 输出格式化字符串chrono使用场景China编程举例1 输出格式化字符串示

windows和Linux安装Jmeter与简单使用方式

《windows和Linux安装Jmeter与简单使用方式》:本文主要介绍windows和Linux安装Jmeter与简单使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录Windows和linux安装Jmeter与简单使用一、下载安装包二、JDK安装1.windows设

使用雪花算法产生id导致前端精度缺失问题解决方案

《使用雪花算法产生id导致前端精度缺失问题解决方案》雪花算法由Twitter提出,设计目的是生成唯一的、递增的ID,下面:本文主要介绍使用雪花算法产生id导致前端精度缺失问题的解决方案,文中通过代... 目录一、问题根源二、解决方案1. 全局配置Jackson序列化规则2. 实体类必须使用Long封装类3.

Springboot实现推荐系统的协同过滤算法

《Springboot实现推荐系统的协同过滤算法》协同过滤算法是一种在推荐系统中广泛使用的算法,用于预测用户对物品(如商品、电影、音乐等)的偏好,从而实现个性化推荐,下面给大家介绍Springboot... 目录前言基本原理 算法分类 计算方法应用场景 代码实现 前言协同过滤算法(Collaborativ

openCV中KNN算法的实现

《openCV中KNN算法的实现》KNN算法是一种简单且常用的分类算法,本文主要介绍了openCV中KNN算法的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的... 目录KNN算法流程使用OpenCV实现KNNOpenCV 是一个开源的跨平台计算机视觉库,它提供了各

springboot+dubbo实现时间轮算法

《springboot+dubbo实现时间轮算法》时间轮是一种高效利用线程资源进行批量化调度的算法,本文主要介绍了springboot+dubbo实现时间轮算法,文中通过示例代码介绍的非常详细,对大家... 目录前言一、参数说明二、具体实现1、HashedwheelTimer2、createWheel3、n

使用Python开发一个简单的本地图片服务器

《使用Python开发一个简单的本地图片服务器》本文介绍了如何结合wxPython构建的图形用户界面GUI和Python内建的Web服务器功能,在本地网络中搭建一个私人的,即开即用的网页相册,文中的示... 目录项目目标核心技术栈代码深度解析完整代码工作流程主要功能与优势潜在改进与思考运行结果总结你是否曾经

Mysql表的简单操作(基本技能)

《Mysql表的简单操作(基本技能)》在数据库中,表的操作主要包括表的创建、查看、修改、删除等,了解如何操作这些表是数据库管理和开发的基本技能,本文给大家介绍Mysql表的简单操作,感兴趣的朋友一起看... 目录3.1 创建表 3.2 查看表结构3.3 修改表3.4 实践案例:修改表在数据库中,表的操作主要

springboot简单集成Security配置的教程

《springboot简单集成Security配置的教程》:本文主要介绍springboot简单集成Security配置的教程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录集成Security安全框架引入依赖编写配置类WebSecurityConfig(自定义资源权限规则