全部代码下载链接: https://download.csdn.net/download/qq_41596860/12302674.

问题描述:

假设在周末舞会上,男士们和女士们进入舞厅时,各自排成一队。跳舞开始时,依次从男队 和女队的队头上各出一人配成舞伴。
若两队初始人数不相同,则较长的那一队中未配对者等待下 一轮舞曲。现要求写一算法模拟上述舞伴配对问题。

先上结果图

初始化

 /*** 初始化* @param length*/@SuppressWarnings("unchecked")public WeekendBallAlgorithm(int size) {this.queueArray = (T[]) new Object[size];this.front = this.rear = 0;}

入队

 /*** 入队* @MethodName: inQueue* @Description: * @param obj* @return boolean * @throws*/@SuppressWarnings("unchecked")public boolean inQueue(T obj) {if (this.front == (this.rear + 1) % this.queueArray.length) {T[] temp = this.queueArray;this.queueArray = (T[]) new Object[queueArray.length * 2];int j = 0;for (int i = this.front; i != this.rear; i = (i + 1) % temp.length) {this.queueArray[j++] = temp[i];}this.front = 0;this.rear = j;}this.queueArray[this.rear] = obj;this.rear = (this.rear + 1) % this.queueArray.length;return true;}

判空

 /*** 判空* @MethodName: isEmpty* @Description: * @return boolean * @throws*/public boolean isEmpty() {return front == rear;}

获取未配对者

 /*** 获取未配对者* @MethodName: getUnpaired* @Description: * @return T * @throws*/public T getUnpaired() {return this.isEmpty() ? null : this.queueArray[front];}

获取匹配者

 /*** 获取匹配者* @MethodName: getMatcher* @Description: * @return T * @throws*/public T getMatcher() {if (isEmpty())return null;int temp = this.front;this.front = (this.front + 1) % this.queueArray.length;return this.queueArray[temp];}

比较两个队列的个数大小,返回小队列的的数据长度

/*** 比较两个队列的个数大小,返回小队列的的数据长度* @MethodName: minLength* @Description: * @param a* @param b* @return int * @throws*/@SuppressWarnings("rawtypes")public static int minLength(WeekendBallAlgorithm a, WeekendBallAlgorithm b) {// 这个比较大小的方法不可以比较队列数组的长度,数组的长度并不是元素的个数int aLength = a.rear - a.front;int bLength = b.rear - b.front;if (aLength < bLength) {return aLength;} else {return bLength;}}

比较两个队列谁更大,返回大的队列

/*** 比较两个队列谁更大,返回大的队列* @MethodName: maxSeqQueue* @Description: * @param a* @param b* @return WeekendBallAlgorithm * @throws*/@SuppressWarnings("rawtypes")public static WeekendBallAlgorithm maxSeqQueue(WeekendBallAlgorithm a, WeekendBallAlgorithm b) {if (a.queueArray.length > b.queueArray.length) {return a;} else {return b;}}

主方法

public static void main(String[] args) {//男孩人数int boyNum=4;//女孩人数int girlNum=3;//歌曲数量int songNum = 5;WeekendBallAlgorithm<String> boys = new WeekendBallAlgorithm<String>(boyNum);WeekendBallAlgorithm<String> girls = new WeekendBallAlgorithm<String>(girlNum);boys.inQueue("老王");boys.inQueue("柯洁");boys.inQueue("绿泡泡");boys.inQueue("狗蛋");girls.inQueue("红果果");girls.inQueue("筠曦");girls.inQueue("菁菁");//根据较小的队列人数来决定一轮舞曲跳舞人数int min = minLength(boys, girls);//循环到歌曲次数为0while (songNum>0) {for (int i = 0; i < min; i++) {//获取匹配者String boy = boys.getMatcher();String girl = girls.getMatcher();//跳舞中System.out.println("[boy:" + boy + "——girl:" + girl+"]");//跳完回队伍boys.inQueue(boy);girls.inQueue(girl);}System.out.println("=======================");System.out.println("较长的那一队中未配对者:" + maxSeqQueue(boys, girls).getUnpaired());System.out.println("=======================");songNum--;}}

有空的动动小手支持一下作者!,给作者点赞加收藏,如果有问题请在底下留言!

群名称:Java技术交流2群, QQ群号:717649447

Java周末舞会算法相关推荐

  1. 队列Java舞会_周末舞会(队列)

    周末舞会(队列) 题目描述 假设在周末舞会上,男士们和女士们进入舞厅时,各自排成一队.跳舞开始时,依次从男队和女队的队头上各出一人配成舞伴.规定每个舞曲能有一对跳舞者.若两队初始人数不相同,则较长的那 ...

  2. Java 数据结构与算法系列之冒泡排序

    一.前言 相信大部分同学都已经学过数据结构与算法这门课了,并且我们可能都会发现一个现象就是我们所学过的数据结构与算法类的书籍基本都是使用 C 语言来写的,好像没见过使用 Java 写的数据结构与算法. ...

  3. Java数据结构与算法——树(基本概念,很重要)

    声明:码字不易,转载请注明出处,欢迎文章下方讨论交流. 有网友私信我,期待我的下一篇数据结构.非常荣幸文章被认可,也非常感谢你们的监督. 前言:Java数据结构与算法专题会不定时更新,欢迎各位读者监督 ...

  4. Java常见排序算法

    Java常见排序算法 转载于:https://www.cnblogs.com/hfultrastrong/p/7829889.html

  5. Java数据结构与算法——插入排序

    声明:码字不易,转载请注明出处,欢迎文章下方讨论交流. 前言:Java数据结构与算法专题会不定时更新,欢迎各位读者监督.本篇文章介绍排序算法中插入排序算法,包括插入排序的思路,适用场景,性能分析,ja ...

  6. JAVA版连连看算法研究

    JAVA连连看之算法: 连连看连接方式的类型:<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:off ...

  7. java 求交集 算法_Java计算交集,差集,并集的方法示例

    Java计算交集,差集,并集的方法示例 发布时间:2020-10-07 10:37:46 来源:脚本之家 阅读:106 作者:benbenkui 本文实例讲述了Java计算交集,差集,并集的方法.分享 ...

  8. Java数据结构和算法(六)——前缀、中缀、后缀表达式

    前面我们介绍了三种数据结构,第一种数组主要用作数据存储,但是后面的两种栈和队列我们说主要作为程序功能实现的辅助工具,其中在介绍栈时我们知道栈可以用来做单词逆序,匹配关键字符等等,那它还有别的什么功能吗 ...

  9. Java数据结构和算法(一)——简介

    本系列博客我们将学习数据结构和算法,为什么要学习数据结构和算法,这里我举个简单的例子. 编程好比是一辆汽车,而数据结构和算法是汽车内部的变速箱.一个开车的人不懂变速箱的原理也是能开车的,同理一个不懂数 ...

最新文章

  1. 猜数字游戏:随机键盘录入一个数字,看是否能猜正确
  2. sqlserver数据文件位置如何迁移
  3. Vigenère密码
  4. 非常不错的文章,囊括啦高性能、高可用的分布式架构体系所有名词
  5. golang web服务器_使用Go制作自己的Web服务器:快速指南
  6. Node版本管理nvm的用法
  7. 三款Scrum项目管理工具
  8. 云上可靠性测试:让我们一起给开发找点事儿
  9. 给新手开店选品的建议
  10. 关于动态数组指针操作的两个例子
  11. Directx11学习笔记【七】 游戏定时器的实现
  12. SpringApplication#run⽅法的第6步,创建ApplicationContext(五)
  13. MT4 服务器信号,手机实时接收MT4软件指标信号(简单几步设置搞定)
  14. 职称计算机初级应知应会书,职称计算机考试用书
  15. iOS - 选取相册中iCloud云上图片和视频的处理
  16. 喜马拉雅音频下载器 V1.2 支持专辑批量下载 喜马拉雅mp3下载导出 喜马拉雅下载器...
  17. 烂泥:Domino8.5服务器迁移方案
  18. No provider available from registry 127.0.0.1:2181 for service com.ddbuy.ser 解决方法
  19. 【开发板资讯】友善推出mini6410 之后不久再推出tiny6410(mini6410和tiny6410有何不同?市场定位如何?)...
  20. javascript兼容性很好的省市区联动,易修改

热门文章

  1. Educational Codeforces Round 112 (Rated for Div. 2)(补题)
  2. vue element 实现table的自动添加列
  3. 天翼数字生活C++客户端实习
  4. 介绍一个“王者”算法,它能认出游戏里的所有英雄
  5. 如何创建用户和组?怎样添加用户呢?windows dos命令
  6. 车载、行车记录仪产品知识汇集
  7. unity 实现闪电特效
  8. nest keyword_Alexa仍将与Nest合作(这是一个问题)
  9. 2021年G2电站锅炉司炉最新解析及G2电站锅炉司炉找解析
  10. 查看linux下oracle安装位置