`
song_shier
  • 浏览: 9781 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

java数字区间重叠校验

    博客分类:
  • java
阅读更多

一、    设计背景

在具体的软件开发过程中可能会涉及到用两个数字表示一定的数字区间范围,或者是一个数字,另一个数字是无穷大或者是无穷小的数字区间范围。其实,总结起来共有8种类型的数字区间,它们是:1、左闭,右边为无穷大的区间;2、右闭,左边为无穷小的区间;3、左开,右边为无穷大的区间;4、右开,左边为无穷小的区间;5、左闭右闭区间;6、左闭右开区间;7、左开右闭区间;8、左开右开区间。在实际应用中往往要保证客户端输入的这些区间不能有相交的情况,并且,针对以上的8种情况的数字区间,任意拿出一种和其它任意一种去判断是否相交,程序逻辑都是不同的。那么这样要是按照面向过程的开发思想从头到尾的将程序写下去会很困难,往往还将程序写错了,写错之后差错比较困难,而且日后的维护工作量都不小。

二、    设计思想

如下类图所示:

 

针对上面分析出来的开发困难,在实际的开发中,我们可以将两个数字表示一定的数字区间范围,或者是一个数字,另一个数字是无穷大或者是无穷小的数字区间范围,都统一的看成一个对象,当然对象是隶属于类的,那么我们就写一个抽象的父类AbstractDigitalRange,因为有8种类型的数字区间,故可以写8个实现类。那么我们分析这8个具体的实现类以及它们的父类应该有什么样的属性和行为呢?

1、              针对属性:

1)、至少应该有表示区间左边端点的属性leftDigital(左边为无穷小的区间的此属性值为null);

2)、至少应该有表示区间右边端点的属性rightDigital(右边为无穷大的区间的此属性值为null);

3)、至少应该有标志此区间类型的属性type,可以将其属性值定为:1代表左闭,右边为无穷大的区间;

2代表右闭,左边为无穷小的区间;

3代表左开,右边为无穷大的区间;

4代表右开,左边为无穷小的区间;

5代表左闭右闭区间;

6代表左闭右开区间;

7代表左开右闭区间;

8代表左开右开区间。

2、              针对行为方法:

1)、得到数字区间的类型的方法getType、得到左边端点的数字的方法getLeftDigital、得到右边端点的数字的方法getRightDigital

2)、各个实现类的构造器,构造其中要因类的不同,将志此区间类型的属性赋值为某个值,以及某些类中不需要设置左边端点或者是右边端点(因为这些类中这个端点值为null),这里不再赘述;

3)、至少应该有判断一个实点数字是否本区间内,在则返回true,否则返回false的方法public boolean isInThisRange(Double digital),实点数字就是数轴上标实际点的数字,相对于标“圈”的虚点数字,当然具体的实现类里面的实现逻辑是不同的;

4)、至少应该有根据指定的邻域趋向,判断判断一个虚点数字,和是否本区间内,在则返回true,否则返回falsepublic boolean isInThisRange(Double digital, int neightbourThend),虚点数字就是数轴上标 “圈”的数字,同时在这里我们为了我们的程序起见,认为虚点数字其真正意义是表示它左方向、或者右方向上的无限接近这个点的邻域的数字(对于判断无穷大的点,可以传入null值,邻域趋向为左方向,表示从左边无限接近无穷大,判断无穷小的点,可以传入null值,邻域趋向为右方向,表示从右边无限接近无穷小),当然具体的实现类里面的实现逻辑是不同的;

5)、至少应该有判断一个指定的数字区间的两个端点是否有一个在本区间内,如果有则返回true,否则返回false的方法public boolean isInThisRange(AbstractDigitalRange digitalRange),其具体实现过程可以根据指定的数字区间的类型,分别调用本类的“判断一个实点数字是否本区间内”的方法public boolean isInThisRange(Double digital),或者调用“根据指定的邻域趋向,判断判断一个虚点数字,和是否本区间内”的方法public boolean isInThisRange(Double digital, int neightbourThend)判断两个端点是否在本区间内。如果一个数字区间的两个端点有一个在本区间内,变相的说明指定的数字区间和本区间相交。

6)、至少应该有判断一个数字区间是否和本区间有交集,有则返回true,没有返回false的方法public boolean isCrossAndThis(AbstractDigitalRange digitalRange)。在具体的实现类中判断一个区间是否和本区间有交集的方法中,大致可以先判断这个区间的两个端点是否有一个在本区间内,然后再调用另一个区间的判断数字区间的两个端点是否有一个在这个区间内的方法digitalRange. isInThisRange(this),将本区间传入,这样两个方法都返回false,则确定没有交集。

那么在具体应用中,判断两个区间是否相交,就可以将两个区间分别做成上面提到的具体实现类的对象,然后调用其中一个对象的“判断一个数字区间是否和本区间有交集”的方法public boolean isCrossAndThis(AbstractDigitalRange digitalRange)即可。这样根据上面的叙述,是不是将两个区间正常相交、两个区间完全重合、一个区间在另一个区间之中等等情况判断出来了。

同理对于多个区间之间判断任意两个是否相交,就可以将多个区间分别做成具体实现类的对象,然后可以放到List中去,遍历List,拿出一个对象和其中任意对象进行判断是否相交即可

三、    具体的java

描述

名称

此类是表示数轴上两个数字之间的数字区间的最顶层抽象父类。

org. digitalrange.AbstractDigitalRange

此类是左闭右开区间的对象化表达方式

org. digitalrange.LeftCloseRightOpenDigitalRange

此类是左开右闭区间的对象化表达方式

org. digitalrange.LeftOpenRightCloseDigitalRange

此类是左闭右闭区间的对象化表达方式

org. digitalrange.LeftCloseRightCloseDigitalRange

此类是左闭,右边为无穷大的区间的对象化表达方式

org. digitalrange.LeftCloseDigitalRange

此类是右闭,左边为无穷小的区间的对象化表达方式

org. digitalrange.RightCloseDigitalRange

此类是左开,右边为无穷大的区间的对象化表达方式

org. digitalrange.LeftOpenDigitalRange

此类是左开右开区间的对象化表达方式

org. digitalrange.LeftOpenRightOpenDigitalRange

此类是右开,左边为无穷小的区间的对象化表达方式

org. digitalrange.RightOpenDigitalRange

四、  Java类的具体描述

org. digitalrange.AbstractDigitalRange

表示数轴上两个数字之间的数字区间的最顶层抽象父类

 

具体描述:

此类是表示数轴上两个数字之间的数字区间的最顶层抽象父类,这个类和其子类是数轴上两个数字之间的数字区间的对象化表达方式。用type属性表示区间的类型。对于右边为无穷大的区间rightDigital属性为null,左边为无穷小的区间的leftDigital属性为null

同时这个类提供判断一个数字是否本区间内的抽象方法;提供判断一个区间是否和本区间有交集的抽象方法;提供判断数字区间的两个端点是否有一个在本区间内的抽象方法。

那么在具体的实现类中判断一个区间是否和本区间有交集的方法中,大致可以先判断这个区间的两个端点是否有一个在本区间内,然后再调用另一个区间的判断数字区间的两个端点是否有一个在这个区间内的方法,将本区间传入,这样两个方法都返回false,则确定没有交集。

方法:

public int getType()public Double getLeftDigital()public Double getRightDigital()public boolean isInThisRange(Double digital)public boolean isInThisRange(Double digital, int neightbourThend)public boolean isInThisRange(AbstractDigitalRange digitalRange)public boolean isCrossAndThis(AbstractDigitalRange digitalRange)

org. digitalrange.LeftCloseRightOpenDigitalRange

左闭右开区间的对象化表达方式,此类继承org. digitalrange.AbstractDigitalRange

具体描述:

此类是左闭右开区间的对象化表达方式,构造器中要将type属性赋值为6

org. digitalrange.LeftOpenRightCloseDigitalRange

左开右闭区间的对象化表达方式,此类继承org. digitalrange.AbstractDigitalRange

具体描述:

此类是左开右闭区间的对象化表达方式,构造器中要将type属性赋值为7

org. digitalrange.LeftCloseRightCloseDigitalRange

左闭右闭区间的对象化表达方式,此类继承org. digitalrange.AbstractDigitalRange

具体描述:

此类是左闭右闭区间的对象化表达方式,构造器中要将type属性赋值为

org. digitalrange.LeftCloseDigitalRange

左闭,右边为无穷大的区间的对象化表达方式,此类继承org. digitalrange.AbstractDigitalRange

具体描述:

此类是左闭,右边为无穷大的区间的对象化表达方式,构造器中要将type属性赋值为1

org. digitalrange.RightCloseDigitalRange

右闭,左边为无穷小的区间的对象化表达方式,此类继承org. digitalrange.AbstractDigitalRange

具体描述:

此类是右闭,左边为无穷小的区间的对象化表达方式,构造器中要将type属性赋值为2

org. digitalrange.LeftOpenDigitalRange

左开,右边为无穷大的区间的对象化表达方式,此类继承org. digitalrange.AbstractDigitalRange

具体描述:

此类是左开,右边为无穷大的区间的对象化表达方式,构造器中要将type属性赋值为3

org. digitalrange.LeftOpenRightOpenDigitalRange

左开右开区间的对象化表达方式,此类继承org. digitalrange.AbstractDigitalRange

具体描述:

此类是左开右开区间的对象化表达方式,构造器中要将type属性赋值为8

org. digitalrange.RightOpenDigitalRange

右开,左边为无穷小的区间的对象化表达方式,此类继承org. digitalrange.AbstractDigitalRange

具体描述:

此类是右开,左边为无穷小的区间的对象化表达方式,构造器中要将type属性赋值为4

 

分享到:
评论
1 楼 panxin 2017-11-23  
 AbstractDigitalRange digitalRange1=new LeftOpenRightOpenDigitalRange(16D,20D);
 AbstractDigitalRange digitalRange2=new LeftOpenRightOpenDigitalRange(20D,25D);


16<=X<=20  20<=X<=25  
这样 数字20  应该是重叠的;



//digitalRange是左开右开区间
			case 8: {
				boolean leftDigitalBoo=this.isInThisRange(digitalRange.getLeftDigital(),1);
				boolean rightDigitalBoo=this.isInThisRange(digitalRange.getRightDigital(),0);
				return leftDigitalBoo||rightDigitalBoo;
				}


改为

//digitalRange是左开右开区间
			case 8: {
				boolean leftDigitalBoo=this.isInThisRange(digitalRange.getLeftDigital(),2);
				boolean rightDigitalBoo=this.isInThisRange(digitalRange.getRightDigital(),0);
				return leftDigitalBoo||rightDigitalBoo;
				}

相关推荐

    java 判断两个时间段是否重叠的案例.docx

    "java 判断两个时间段是否重叠的案例" 本文主要介绍了如何在 Java 中判断两个时间段是否重叠的案例。时间段是指具有起始时间和终止时间的时间范围,在实际开发中,我们经常需要判断两个时间段是否存在重叠的情况。...

    表单校验时间段重叠问题

    有个统计时段的字段,需排除选择的时间范围不能与已有时间段重叠

    java 判断两个时间段是否重叠的案例

    Java 判断两个时间段是否重叠的案例 在 Java 中,判断两个时间段是否重叠是一种常见的需求,特别是在业务逻辑中需要检查时间段的交叉情况时。在本文中,我们将介绍如何使用 Java 判断两个时间段是否重叠,并提供...

    打造高效集成工具箱:基于Python与Tkinter的实战开发教程

    在日常的开发和使用中,我们经常需要借助各种小工具来提高工作效率,例如快速启动常用的应用程序、管理文件等。一个简单但功能强大的集成工具箱可以帮助用户快速访问、启动并管理程序。今天,我们将以Python为基础,结合Tkinter和Win32API,开发一个类似Windows快捷方式的工具箱应用,能够让你轻松集成各种常用程序并一键启动

    django自建博客app

    django自建博客app

    《基于YOLOv8的智慧校园实验室高压灭菌锅安全联锁系统》(包含源码、可视化界面、完整数据集、部署教程)简单部署即可运行。功能完善、操作简单,适合毕设或课程设计.zip

    《基于YOLOv8的智慧校园实验室高压灭菌锅安全联锁系统》(包含源码、可视化界面、完整数据集、部署教程)简单部署即可运行。功能完善、操作简单,适合毕设或课程设计

    用于hifi测序数据的基因组组装程序

    用于hifi测序数据的基因组组装程序

    Microsoft Access 2010 数据库引擎可再发行程序包AccessDatabaseEngine-X64解压后的文件AceRedist

    Microsoft Access 2010 数据库引擎可再发行程序包AccessDatabaseEngine-X64解压后的文件AceRedist

    从大模型、智能体到复杂AI应用系统的构建-以产业大脑为例.pdf

    从大模型、智能体到复杂AI应用系统的构建——以产业大脑为例

    自然语言处理之TF-IDF算法与TextRank算法的缠绵_textrank,tf-idf和两者的组合-CSDN博客.html

    自然语言处理之TF-IDF算法与TextRank算法的缠绵_textrank,tf-idf和两者的组合-CSDN博客.html

    科学智能2023版《科学智能 (AI4S)全球发展观察与展望》:AI4S驱动的跨领域技术创新与应用

    内容概要:2023版《科学智能 (AI4S)全球发展观察与展望》阐述了AI for Science(AI4S)在全球范围内的最新进展及其对科学和工业的深远影响。文章首先回顾了AI4S在过去一年中的快速发展,特别是在药物研发、材料科学、地质学、污染治理等多个领域的应用实例。AI4S通过结合深度学习、机器学习和其他AI技术,加速了从基础研究到实际应用的转化过程。例如,在药物研发中,AI4S帮助科学家克服了“反摩尔定律”的挑战,提高了新药研发的成功率;在材料科学中,AI4S实现了复杂材料的高效模拟,如人造钻石、石墨烯、碳纳米管等;在地质学中,AI4S通过模拟地球内部结构和物理过程,为地震学研究提供了新视角。此外,文章还探讨了大语言模型(LLMs)与科学方法的结合,指出LLMs不仅能辅助科学研究,还能生成新的科学假设并进行逻辑推理。 适合人群:具备一定科研背景或对AI技术感兴趣的科研人员、工程师、政策制定者及高校师生。

    个人健康与健身追踪数据集,包含了日常步数统计、睡眠时长、活跃分钟数以及消耗的卡路里,适用于数据分析、机器学习

    这个数据集包含了日常步数统计、睡眠时长、活跃分钟数以及消耗的卡路里,是个人健康与健身追踪的一部分。 该数据集非常适合用于以下实践: 数据清洗:现实世界中的数据往往包含缺失值、异常值或不一致之处。例如,某些天的步数可能缺失,或者存在不切实际的数值(如10,000小时的睡眠或负数的卡路里消耗)。通过处理这些问题,可以学习如何清理和准备数据进行分析。 探索性分析(发现日常习惯中的模式):可以通过分析找出日常生活中的模式和趋势,比如一周中哪一天人们通常走得最多,或是睡眠时间与活跃程度之间的关系等。 构建可视化图表(步数趋势、睡眠与活动对比图):将数据转换成易于理解的图形形式,有助于更直观地看出数据的趋势和关联。例如,绘制步数随时间变化的趋势图,或是比较睡眠时间和活动量之间的关系图。 数据叙事(将个人风格的追踪转化为可操作的见解):通过讲述故事的方式,把从数据中得到的洞察变成具体的行动建议。例如,根据某人特定时间段内的活动水平和睡眠质量,提供改善健康状况的具体建议。

    框架结构天城商业办公楼5200平米(建筑图 结构图 计算书 开题报告 任务书 文献翻.zip

    框架结构天城商业办公楼5200平米(建筑图 结构图 计算书 开题报告 任务书 文献翻.zip

    柴油机连杆加工工艺及夹具设计.zip

    柴油机连杆加工工艺及夹具设计.zip

    BeautifulSoup中的select方法汇总

    读书网首页的HTML信息

    渐变色文字生成工具 v1.0一款让文字生成渐变颜色代码的软件文字渐变颜色代码生成器.rar

    文字渐变颜色代码生成器:让文字绽放多彩魅力,演示:在信息交流日益丰富的今天,个性化的文字展示成为吸引目光的关键。这款文字渐变颜色代码生成器,便是为满足这一需求而生的绿色软件,无需安装,便捷实用。 它的操作极为简便。用户只需在软件界面中输入想要转换的文字内容,接着从丰富的色彩选项里挑选心仪的起始颜色与结束颜色,随后轻轻按下 “转换按钮”,神奇的事情就此发生 —— 适用于论坛、网页、QQ 空间等多种平台,以及自定义格式的渐变颜色代码便会即刻生成。不仅如此,生成的代码还能自动复制到剪切板,极大地节省了用户手动复制的时间。当你在论坛回帖、更新网页内容或是装扮 QQ 空间时,只需轻松粘贴代码,原本单调的文字瞬间就能拥有绚丽的渐变色彩,瞬间脱颖而出,为你的表达增添独特魅力,让文字不再平凡,轻松成为视觉焦点。 一款可以轻松把一段文字生成渐变颜色代码的绿色软件,当你在软件中输入完要转换的文字后,只需要挑选自己喜欢的起始颜色、结束颜色后,按一下―转换按钮即可生成相应的论坛/网页/QQ空间以及自定义格式代码,并且代码可以自动复制到剪切板中,回帖时直接粘贴代码即可不错得文字代码生成器,让你得文字更加漂亮.

    【锂电池剩余寿命预测】Transformer锂电池剩余寿命预测(Matlab完整源码和数据)

    1.【锂电池剩余寿命预测】Transformer锂电池剩余寿命预测(Matlab完整源码和数据) 2.数据集:NASA数据集,已经处理好,B0005电池训练、B0006测试; 3.环境准备:Matlab2023b,可读性强; 4.模型描述:Transformer在各种各样的问题上表现非常出色,现在被广泛使用。 5.领域描述:近年来,随着锂离子电池的能量密度、功率密度逐渐提升,其安全性能与剩余使用寿命预测变得愈发重要。本代码实现了Transformer在该领域的应用。 6.作者介绍:机器学习之心,博客专家认证,机器学习领域创作者,2023博客之星TOP50,主做机器学习和深度学习时序、回归、分类、聚类和降维等程序设计和案例分析,文章底部有博主联系方式。从事Matlab、Python算法仿真工作8年,更多仿真源码、数据集定制私信。

    《基于YOLOv8的船舶压载水违规排放监测系统》(包含源码、可视化界面、完整数据集、部署教程)简单部署即可运行。功能完善、操作简单,适合毕设或课程设计.zip

    资源内项目源码是来自个人的毕业设计,代码都测试ok,包含源码、数据集、可视化页面和部署说明,可产生核心指标曲线图、混淆矩阵、F1分数曲线、精确率-召回率曲线、验证集预测结果、标签分布图。都是运行成功后才上传资源,毕设答辩评审绝对信服的保底85分以上,放心下载使用,拿来就能用。包含源码、数据集、可视化页面和部署说明一站式服务,拿来就能用的绝对好资源!!! 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、大作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.txt文件,仅供学习参考, 切勿用于商业用途。

    《基于YOLOv8的港口船舶靠泊角度偏差预警系统》(包含源码、可视化界面、完整数据集、部署教程)简单部署即可运行。功能完善、操作简单,适合毕设或课程设计.zip

    资源内项目源码是来自个人的毕业设计,代码都测试ok,包含源码、数据集、可视化页面和部署说明,可产生核心指标曲线图、混淆矩阵、F1分数曲线、精确率-召回率曲线、验证集预测结果、标签分布图。都是运行成功后才上传资源,毕设答辩评审绝对信服的保底85分以上,放心下载使用,拿来就能用。包含源码、数据集、可视化页面和部署说明一站式服务,拿来就能用的绝对好资源!!! 项目备注 1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合小白学习进阶,当然也可作为毕设项目、课程设计、大作业、项目初期立项演示等。 3、如果基础还行,也可在此代码基础上进行修改,以实现其他功能,也可用于毕设、课设、作业等。 下载后请首先打开README.txt文件,仅供学习参考, 切勿用于商业用途。

Global site tag (gtag.js) - Google Analytics