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,否则返回false的public 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
java数字区间重叠校验相关推荐
- java 数字区间_(Java实现) 整数区间
一.题目描述 给n个区间,形式为[a, b],a和b均为整数,且a < b. 求一个最小的整数点的集合,使得每个区间至少2个不同的元素(整数点)属于这个集合. 求这个集合的元素个数. 输入 第1 ...
- java 中文及特殊字符校验
java 中文及特殊字符校验 CreateTime--2017年8月25日16:54:50 Author:Marydon 一.参考链接 http://blog.csdn.net/imduan/arti ...
- Java总结:正则表达式进行校验
Java总结:正则表达式进行校验 目录 Java总结:正则表达式进行校验 一.校验数字的表达式 二.校验字符的表达式 了解理论知识,请点击:Java总结:正则表达式 一.校验数字的表达式 1 数字:^ ...
- Java 常用工具类 - 校验身份证 IdCardUtils
身份证校验工具类 IdCardUtils import org.apache.commons.lang3.StringUtils;import java.text.ParseException; im ...
- java 车牌号加减密_[Java教程]车牌号校验规则
[Java教程]车牌号校验规则 0 2018-10-19 16:00:59 一.车牌验证规则 1.传统车牌 第1位为省份简称(汉字),第二位为发牌机关代号(A-Z的字母)第3到第7位为序号(由字母或数 ...
- java 获取区间随机数_Java获取随机数的3种方法
主要介绍了Java获取随机数的3种方法,主要利用random()函数来实现 方法1 (数据类型)(最小值+Math.random()*(最大值-最小值+1))例: (int)(1+Math.rando ...
- java 获取区间随机数_Java获取随机数的几种方法
随机数在实际中使用很广泛,比如要随即生成一个固定长度的字符串.数字.或者随即生成一个不定长度的数字.或者进行一个模拟的随机选择等等.Java提供了最基本的工具,可以帮助开发者来实现这一切. 一.Jav ...
- java加权区间调度_区间调度问题详解
今天给大家介绍一下区间调度问题.区间调度是一类难度比较大,但同时应用比较广的问题,经常会在面试中以各种形式出现.本文将会介绍区间调度的各种变形,希望能使大家在面临区间调度问题时得心应手,并可以在实际工 ...
- Java生成CRC16数据校验码
CRC即循环冗余校验码(Cyclic Redundancy Check[1] ):是数据通信领域中最常用的一种查错校验码,其特征是信息字段和校验字段的长度可以任意选定.循环冗余检查(CRC)是一种数 ...
最新文章
- ROS与深度相机入门教程:(1)Ubuntu16.04 在ROS中驱动Intel D435i深度相机
- Notepad++ 列操作
- 面试官问我:一个 TCP 连接可以发多少个 HTTP 请求?我竟然回答不上来...
- 每日一皮:老大爷,您保持年轻的秘诀是什么
- tp设置打印机虚拟服务器,tp打印机服务器设置
- HTML表单用于收集,HTML表单
- flink 8 state checkpoint savepoint区别
- java object转map_Java反序列化学习之CommonsCollections1
- ajax 分页 评论刷新,评论:js无刷新分页(原创)
- ssh图片上传 java_ssh上传并显示图片
- 如何使用SQL删除某个字段重复的记录,保留其中一条
- 098 元类(metaclass)
- Spring Boot 中使用@KafkaListener并发批量接收消息(转载)
- 那个只能在win7的扫雷游戏,你能通关吗?今天用Python教大家,上号!!!
- java在线客服系统_JSP在线客服系统
- 【面试】--【集合容器】
- sudo: no valid sudoers sources found,quitting sudo sudoers改坏后无法使用sudo的解决办法
- 关于大数据后端粉丝交流群
- 面试通过后如何拒绝HR拿offer
- Office Professional Plus 2016简体中文版