数据结构--顺序表小项目--简单洗牌算法(JAVA)

2024.12.29 【RNA-seq】Rawdata数据缺失问题与解决方案 Fastq格式是一种用于存储高通量测序数据的文件格式,包含序列和相应的质量信息。第一行以开头,后接序列标识符;第二行是测序的DNA序列;第三行以开头,可能会跟随序列标识符;第四行是对应的质量值,以ASCII字符表示。Rawdata的数据完整性通常情况下是没有问题的,但我们仍然需要对下机数据进行验证,确保后续分析的正常进行,好的分析习惯可以提高整体的分析效率,避免很多不必要的麻烦。 阅读详情

首先创建牌的属性Card类

public class Card {
    private String suit;//牌的花色
    private int rank;//牌的面值

    public Card(String suit, int rank) {
        this.suit = suit;
        this.rank = rank;
    }

    @Override
    public String toString() {
        return "{" + suit + rank + "}";
    }
}

在牌的功能类CardFunc中依次实现买牌(创建牌),洗牌,发牌等功能

买牌方法:

这里为了好表示就去除了大王和小王,剩余52张牌,可以通过循环依次创建

public class Cardfunc {
    //花色的种类
    public static final String[] suits = {"♥", "♠", "♣", "♦"};

    //买牌
    public List<Card> buyCard() {
        List<Card> cardList = new ArrayList<>();
        for (int i = 1; i < 13; i++) {
            for (int j = 0; j < 4; j++) {
                int rank = i;
                String suit = suits[j];
                Card card = new Card(suit, rank);
                cardList.add(card);
            }
        }
        return cardList;
    }
}

测试类测试一下

public class Test {
    public static void main(String[] args) {
        Cardfunc cardfunc = new Cardfunc();
        //买牌
        System.out.println("洗牌前");
        List<Card> cardList = cardfunc.buyCard();
        System.out.println(cardList);
    }
}

接下来实现洗牌功能 

 //洗牌
    public void shuffle(List<Card> cardList) {
        Random random = new Random();
        for (int i = cardList.size() - 1; i > 0; i--) {
            int index = random.nextInt(i);
            swap(cardList, i, index);
        }
    }
       //被调用的交换方法
     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);

    }

 randdom.nextInt(i)会返回一个大于等于0小于i的数字

上述for循环的逻辑就是从第52张牌与前依次面随机一张牌交换,从而实现洗牌功能

测试一下:

public class Test {
    public static void main(String[] args) {
        Cardfunc cardfunc = new Cardfunc();
        //买牌
        System.out.println("洗牌前");
        List<Card> cardList = cardfunc.buyCard();
        System.out.println(cardList);

        //洗牌
        System.out.println("洗牌后");
        cardfunc.shuffle(cardList);
        System.out.println(cardList);

    }
}

实现发牌方法:

//发牌
    public List<List<Card>> play(List<Card> cardList) {
        //选手一
        List<Card> hand0 = new ArrayList<>();
        //选手三
        List<Card> hand1 = new ArrayList<>();
        //选手二
        List<Card> hand2 = new ArrayList<>();
        
        List<List<Card>> hand = new ArrayList<>();
        hand.add(hand0);
        hand.add(hand1);
        hand.add(hand2);

        //三个人 每个人轮流摸五张牌
        for (int i = 0; i < 5; i++) {
            for (int j = 0; j < 3; j++) {
                Card card = cardList.remove(0);
                hand.get(j).add(card);
            }
        }
        return hand;
    }

List<List<Card>>类似与一个二维数组,如下图

测试一下:

public class Test {
    public static void main(String[] args) {
        Cardfunc cardfunc = new Cardfunc();
        //买牌
        System.out.println("洗牌前");
        List<Card> cardList = cardfunc.buyCard();
        System.out.println(cardList);

        //洗牌
        System.out.println("洗牌后");
        cardfunc.shuffle(cardList);
        System.out.println(cardList);

        //3个人 每个人轮流摸5张牌
        List<List<Card>> ret = cardfunc.play(cardList);
        for (int i = 0; i < ret.size(); i++) {
            System.out.println("第" + (i + 1) + "个人的牌" + ret.get(i));
        }
        System.out.println("剩下的牌");
        System.out.println(cardList);
    }
}

第一次 

 第二次

 可见每次都具有随机性

 

Qt 国产嵌入式操作系统实现文字转语音功能(ekho库) Qt 国产嵌入式操作系统实现文字转语音功能(TTS)_tts驱动 转文字-优快云博客在继上篇文章之后,甲方粑粑不满意使用eSpeak发出的声音太难听了,这就不得不找个替代品,声音稍微好听了一些。使用ekho开源库。Ekho(余音)是一个免费、开源的中文语音合成软件。它目前支持粤语、普通话(国语)、诏安客语、藏语、雅言(中国古代通用语)和韩语(试验中),英文则通过Festival间接实现。Ekho支持Linux、Windows和Android平台。 阅读详情

相关推荐

C# OpenCvSharp4实战:5分钟搞定工业视觉模板匹配(附完整代码)

本文为C#开发者提供了基于OpenCvSharp4的工业视觉模板匹配实战指南。通过详细的环境搭建、核心原理解析和完整代码示例,重点介绍了如何使用`matchTemplate`函数,特别是`CCoeffNormed`方法,快速实现高精度、抗光照变化的模板匹配,并分享了多目标匹配、图像预处理等工业级优化技巧。

weixin_29053067的博客 503

探索洗牌算法的魅力与杨辉三角的奥秘:顺序表的实际运用

经过深入研究与实践,我们成功运用顺序表解决了洗牌算法和杨辉三角这两个挑战性问题。对于数据结构领域的各类题目,只有不断地刷题、总结,才能达到真正的熟练与精通。让我们共同学习,共同进步,为知识的海洋增添更多宝贵的财富!

Easonmax的博客 1603

UCD9081EVM电源时序管理:硬件配置与GUI操作全解析

电源时序管理是复杂电子系统设计的核心环节,它通过精确控制多路电源的上电/下电顺序,确保核心芯片免受浪涌电流或电压倒灌的损害。其原理基于状态机逻辑与电压监控,技术价值在于将硬连线时序转化为可编程配置,极大提升了系统可靠性与设计灵活性。在服务器、通信设备、工控系统等高可靠性应用场景中,时序控制器是实现稳定启动与故障保护的关键。本文以德州仪器UCD9081评估模块为例,深入剖析其硬件跳线配置与图形用户界面操作,涵盖I2C地址设置、电压监控分压计算、时序条件与故障响应策略等工程实践要点,帮助工程师快速掌握这一电源时

weixin_42696271的博客 303

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

本文通过讲解简单洗牌算法来展现ArrayList的具体使用,详细涵盖了制作扑克牌、洗牌、发牌等过程。

2301_80038570的博客 742

Upload Symbols Failed:The archive did not include a dSYM for the LiveKitWebRTC.framework with the UU

你需要从源码构建 LiveKitWebRTC,而不是使用 CocoaPods 安装的预编译 .xcframework。Step 2: 修改 Podfile 使用本地路径引用(不是从源下载的 xcframework)方法 :强制从源码构建 LiveKitWebRTC.framework(推荐)这样它就会编译 WebRTC 并带上正确 UUID 的 dSYM。替换路径为你 clone 下来的 LiveKit 源码位置。Step 1: 克隆源码仓库。

baidu_40537062的博客 2135

为什么AI时代的优秀组织,都在学习Meta的Pod结构?看完秒懂

当AI技术重塑产业格局,企业协作正面临前所未有的挑战——层级繁琐、跨部门内耗、迭代滞后,传统组织模式早已难以跟上技术革新的步伐。作为全球AI原生企业的标杆,Meta独创的Pod组织模式,用“小而美”的自治单元打破困局,成为AI时代高效协作的典范。本文将从定义、运作、价值到未来演进,全面拆解Pod模式,为企业组织变革提供可参考的思路与路径。德鲁克曾说:“组织的功能就是让平凡的人做平凡的事。”而Meta Pod打破这一局限,通过去中心化、指标导向、跨界融合,让优秀人才产生“化学反应”。

Kiss_AIHR的博客 1175

【Java数据结构 -- 顺序表】

List和ArrayList顺序表

m0_63440113的博客 1467

C语言专升本编程题

湖南省专升本选拔考试,C语言程序设计内部习题

weixin_45729947的博客 2117

数据结构(Java版)第四期:ArrayLIst和顺序表(上)

/第一种方式,创建ArrayList对象,构造空的顺序表//第二种方式其中ArrayList里面,也是实现了List的接口。也就是说,我们完全可以通过向上转型,把List引用指向ArrayList的实例。我们来看下面两段代码的,两个都是构造空的顺序表,二者有什么区别呢?第一个是创建了一个盒子,盒子里面为空,而第二个却连盒子都没有。//使用arrayList1复制一份,生成arrayList3//构造的同时,可以去指定初始容量。

2401_85198927的博客 6271

SAP 生产订单工序删除状态撤回简介

2、我们在前台对于生产订单的状态一个是在生产订单抬头中的状态,另外一个是针对上面一直在测试的是工序的状态,这个两个状态是前台可见的状态,实际生产订单还有一个组件物料的状态,这个状态是不可见的一个状态。生产订单中的0010工序中对应的组件的栏位被标识,表示有物料分配到了0010的工序中,正常情况下0010的工序被分配了工序是不应该被删除的。将已领料的工序删除掉,导致异常的发生。当物料已领料会,用户仍然把已分配的物料的工序删除掉,导致后续业务操作过程中产生异常,如下图中所示,0010的工序被打上了删除标识。

我小时候很黑的博客 1942

maya导入导出bvh 自动 脚本

maya打开bvh脚本

jacke121的专栏 1551

Java->顺序表

usedSize++;@Overridei++) {@Overridethrow new PosOutOfException("pos位置不合法!");resize();i > pos;return -1;@Override。

2401_85234841的博客 1121

QMK键盘固件开发零基础教程(2025全新重制版)

《QMK键盘固件开发零基础教程(2025全新重制版)》是一套专为键盘爱好者和开发者设计的全面教程,旨在帮助用户从零基础快速掌握最新的QMK固件开发技术。教程基于2025年最新的QMK版本(0.19.8+),解决了旧版教程中的诸多问题,如概念不清、步骤缺失和代码过时等。新版教程提供了详细的图解、完整的项目源码以及从环境配置到高级功能开发的全流程指导。此外,教程还涵盖了2024年QMK生态的重大变革,包括键码系统的重构、编译工具链的更新以及Config文件格式的改变等。付费版教程额外提供独家内容,如新特性解析、

Despacito0o的博客 1121

Java实现数据结构——顺序表

笔者在以前的文章中实现过顺序表本文在理论上不会有太详细的讲述如有需要可以翻看笔者之前的文章Java中已经封装好了顺序表的类但在使用之前先自己实现一遍。

2303_80472275的博客 882

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Java数据结构-part2【顺序表、ArrayList】

什么是List、什么是线性表、认识了顺序表、ArrayList以及它们的常用方法。

m0_75082861的博客 957

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

【数据结构】ArrayList与顺序表

通过上篇博客的介绍,我们初步认识数据结构的基本知识,接下来与大家分享关于ArrayList与顺序表的相关知识。ArrayList是数组链表,也就是我们经常所说的顺序表。它是Java内置的,让我们更加方便地编写代码,下面我们就一起来了解ArrayList与顺序表的相关知识。super(msg);ArrayList具有以下的优缺点:根据指定下标去查找元素或更新元素的效率很高,时间复杂度为O(1)。在插入或删除数据时,不仅每一次都需要移动数据,如果要把数据插到0下标位置或删除0下标的数据,

m0_74336101的博客 1577

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

数据结构-顺序表

1.ArrayList底层使用连续的空间,任意位置插⼊或删除元素时,需要将该位置后序元素整体往前或者往后搬移,故时间复杂度为O(N)2. 增容需要申请新空间,拷贝数据,释放旧空间。会有不小的消耗。3. 增容⼀般是呈2倍的增长,势必会有⼀定的空间浪费。

独断万古他化的博客 1365

【Java数据结构】初识线性表之一:顺序表

本章节描述了如何声明一个顺序表 ArrayList ,以及顺序表中的一些方法如何使用。最后附加两个经典算法例题(洗牌算法和杨辉三角)使用顺序表完成。

yican2580的博客 1869

【数据结构】ArrayList与顺序表 —— 有码有图有真相

在集合框架中,ArrayList是一个普通的类,实现了List接口,具体框架图如下:ArrayList是java.util包下的,使用的时候一定记着导包。ArrayList是以泛型方式实现的,使用时必须要先实例化。ArrayList实现了RandomAccess接口,表明ArrayList支持随机访问ArrayList实现了Cloneable接口,表明ArrayList是可以clone的ArrayList实现了Serializable接口,表明ArrayList是支持序列化的。

小黑屋的黑小子的博客 1331

Java顺序表实现扑克牌Fisher-Yates 洗牌算法

摘要:Java实现扑克牌游戏基础功能 本文介绍了使用Java实现扑克牌游戏的基础功能,包括牌的初始化、洗牌和发牌三个核心步骤。首先定义了Card类表示单张扑克牌,包含花色和面值属性。然后通过双重循环初始化52张标准扑克牌,并使用Fisher-Yates洗牌算法实现公平的随机洗牌。最后实现了发牌功能,支持多个玩家轮流抓牌,并采用二维顺序表结构存储各玩家手牌。整个过程展示了如何利用Java集合框架高效地模拟扑克牌游戏的基本操作,为后续开发完整游戏奠定了基础。

加油,量变引起质变 498

数据结构——顺序表与链表

链表是⼀种物理存储结构上⾮连续存储结构,数据元素的逻辑顺序是通过链表中的引⽤链接次序实现的。

2302_80250536的博客 873

【数据结构】5.ArrayList与顺序表

在集合框架中,ArrayList是一个普通的类,实现了List接口。ArrayList是以泛型方式实现的,使用时必须要先实例化。ArrayList实现了RandomAccess接口,表明ArrayList支持随机访问。ArrayList实现了Clonable接口,表明ArrayList是可以clone的。ArrayList实现了Serializable接口,表明ArrayList是支持序列化的。

2301_79719531的博客 1294

Java顺序表实战:从零实现ArrayList与洗牌算法

在remove/get/set等方法中必不可少,index<0或index≥usedsize时需要抛出IndexOutOfBoundsException,这是保证代码健壮性的基础。当顺序表存储对象而非基本类型时,需要重写equals方法确保contains/remove等按值操作正常工作,这是实际项目中最容易忽略的点。洗牌算法中的随机数种子在生产环境应改用System.currentTimeMillis(),但在单元测试中固定种子有利于结果验证。洗牌算法的时间复杂度是O(n),能否进一步优化?

JetFalcon67的博客 560

ArrayList——简单洗牌算法

该语法情况比较特殊,相当于一个“二维数组”存着一个个线性表的结构,如图:该语法的灵活性强,可适用于多种类型和多种情况。接下来就使用该语法来实现一个简单的洗牌操作。

2302_80521088的博客 1137

【Java数据结构】线性表-顺序表

线性表(linear list)

m0_72670269的博客 957

顺序表ArrayList实战-简单的洗牌算法

本文实现了一个扑克牌游戏的Java程序,包含三个主要功能:1) 创建Card类表示扑克牌的花色和牌面值;2) 实现买牌和洗牌功能,通过随机交换元素实现洗牌;3) 模拟三人轮流抓牌的过程。程序使用ArrayList存储牌组,通过双重循环实现轮流发牌,并展示了剩余牌和每人手中的牌。代码结构清晰,包含完整的测试输出,可作为扑克牌游戏的基础实现。

2403_89347326的博客 386
上一篇: Java中的深层拷贝和浅层拷贝
下一篇: Java写数据结构--单向无头非循环链表
刘 大 望
博客等级 码龄2年 896粉丝 61原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值