学习笔记-java编程-交通灯管理器设计流程。
先抛出需求:
- 异步随机生成按照各个路线行驶的车辆。
例如:
由南向而来去往北向的车辆 ---- 直行车辆
由西向而来去往南向的车辆 ---- 右转车辆
由东向而来去往南向的车辆 ---- 左转车辆
。。。
- 信号灯忽略黄灯,只考虑红灯和绿灯。
- 应考虑左转车辆控制信号灯,右转车辆不受信号灯控制。
- 具体信号灯控制逻辑与现实生活中普通交通灯控制逻辑相同,不考虑特殊情况下的控制逻辑。
注:南北向车辆与东西向车辆交替放行,同方向等待车辆应先放行直行车辆而后放行左转车辆。
- 每辆车通过路口时间为1秒(提示:可通过线程Sleep的方式模拟)。
- 随机生成车辆时间间隔以及红绿灯交换时间间隔自定,可以设置。
- 不要求实现GUI,只考虑系统逻辑实现,可通过Log方式展现程序运行结果。
这里使用面对对象的思想对问题进行解析
首先对路口车辆路线进行建模,发现有12条路线
其中可以分为三组:
由南向而来去往北向的车辆和其相对方向 ---- 直行车辆
由西向而来去往南向的车辆和其相对方向 ---- 右转车辆
由东向而来去往南向的车辆和其相对方向 ---- 左转车辆
其中,右转车辆又是不受红绿灯控制的,可以理解为所有右转车辆路线绿灯为常亮状态。
而红绿灯中绿灯(亮) 红灯(不亮)可以利用灯亮不亮这样来表示。
现在设计路线的模型Road,
总共12条路线,所以要实现12个类。基础模型为,设计一条线程,随机的时间内增加一辆车到集合中,
再设计一条线程每隔一秒种检查一次红绿灯,若为绿灯(亮),则从路线车辆集合中删除第一个元素,视为该车通过路口。
路线的模型设计完毕。
设计交通灯模型Lamp。
这里交通灯是对应于每一条路线的,所以要设计12个来对应路线。但是路线是固定的,所以交通灯可以设计为枚举类型。
总共有12个元素。
每隔交通灯实例对象里要有 灯亮的标志位:lighted
获取标志位的方法:islighted()
控制灯亮的方法:light()
控制灯灭的方法:breakOut()
这里我们可以根据上面分析的三组情况,把交通灯分为三组
我们只要控制四个方向的交通灯就可以了,其中右转的灯是常亮的,所以可以设置light为true
由南向北,由南向西,由东向西,由东向南,只要控制这四个方向的灯,就可以控制对应相对方向的灯,因为相对方向的灯都是相同状态的。
所以这里就可以设置一个三个构造参数的灯,
分别是相反方向的灯:String opposite
灯灭后下一个亮的灯:String next
和该灯原本的状态:boolean lighted
到这里Lamp模型设计完毕。
现在,路线模型、交通灯模型设计完毕了,还需要一个交通灯控制器来控制灯的变化,从而实现交通的运行。
根据现实情况,只有一条路线和其相对的路线可以同一时间运行车辆。
所以这里控制系统需要先控制其中一条方向灯为亮(对应方向的灯也会被打开)
使用定时系统,例如每隔10秒钟切换一次路线
设一个当前行驶路线的灯,置为亮。
每次灯灭的时候就把下一个变亮的灯设置为当前路线行驶灯。
到这里,控制器就设置完毕了。
转载于:https://www.cnblogs.com/ecoz/p/3776529.html
学习笔记-java编程-交通灯管理器设计流程。相关推荐
- Java编程基础 - 布局管理器
1. 布局管理器介绍 组件在容器(比如JFrame)中的位置和大小是由布局管理器来决定的.所有的容器都会使用一个布局管理器,通过它来自动进行组件的布局管理. java共提供了五种布局管理器:流式布局管 ...
- JMeter学习笔记--使用HTTP信息头管理器
使用HTTP信息头管理,可以帮助测试人员设定JMeter发送的HTTP请求头所包含的信息.HTTP信息头中包含有"User-Agent"."Pragma".&q ...
- java学习笔记 java编程思想 第7章 复用类
文章目录 7.1 组合语法 练习1 7.2 继承语法 7.2.1 初始化基类 练习3 练习4 练习5 带参数的构造器 练习6 练习7 练习8 练习9 练习10 7.3 代理 练习11 7.4 结合使用 ...
- java学习笔记 java编程思想 第6章 访问权限控制
文章目录 6.1 包:库单元(the library unit) 6.1.1 代码组织 6.1.2 创建独一无二的包名 练习1 练习2 6.1.3 定制工具类 6.1.4 用import改变行为 练习 ...
- java学习笔记 java编程思想 第4章 控制执行流程
目录 4.1 true和false 4.2 if-else 4.3 迭代 4.3.1 do-while 4.3.2 for 练习1 练习2 练习3 练习4 练习5 4.3.3 逗号操作符 4.4 Fo ...
- 基于单片机的智能交通灯系统的设计
目 录 1绪论 1 2课题的设计要求和设计方案 2 2.1设计要求 2 2.1.1 题目概述 2 2.1.2 设计任务 2 2.1.3 设计要求 2 2.2设计方案 2 2.2.1供电方案 2 2.2 ...
- JAVA桌面UI编程之布局管理器
布局管理器 为了跨平台java引入了布局管理器来管理界面,JAVA一共有6种布局管理器,下面是介绍 BorderLayout 界面分东西南北中5个方向,最多只能显示5个控件,默认放入中间,下面的程序将 ...
- 编程学习笔记之python深入之装饰器案例及说明文档[图]
编程学习笔记之python深入之装饰器案例及说明文档[图] 装饰器即在不对一个函数体进行任何修改,以及不改变整体的原本意思的情况下,增加函数功能的新函数,因为这个新函数对旧函数进行了装饰,所以称为装饰 ...
- JDBC学习笔记03【JDBC事务管理、数据库连接池、JDBCTemplate】
黑马程序员-JDBC文档(腾讯微云)JDBC笔记.pdf:https://share.weiyun.com/Kxy7LmRm JDBC学习笔记01[JDBC快速入门.JDBC各个类详解.JDBC之CR ...
最新文章
- Rsync服务让SLB下多台centos服务器文件同步更新
- python常用关键字意思_python基础之常用关键字总结
- can协议crc计算_CAN总线的升级版——CAN FD简介
- 基准对象object中的基础类型----列表 (四)
- Facebook、LinkedIn、Airbnb、Google专家聚首QCon,他们会带来什么?
- AMD收购Xilinx、Zoom为全体用户提供端到端加密、Facebook云游戏、苹果搜索引擎等|Decode the Week...
- Linux 修改用户名的主目录 家目录
- node在regedit配置哪个位置_Spring Boot 2.x基础教程:Spring Data JPA的多数据源配置
- 音视频开发(16)---海康IPC+NVR+EasyDarwin+EasyPusher+VLC实现Web实时播放RTSP视频
- SQL中DB2数据库修改某字段长度或类型
- modscan32做主站 一直显示MODBUS MESSAGE TIME-OUT
- 2021-07-08郝斌C语言笔记
- 批量给多个 Excel 工作薄文件中插入新的工作表 Sheet
- 日语语音识别_日语语音识别软件_日语语音识别在线 - 云+社区 - 腾讯云
- inflect java_Python lemminflect包_程序模块 - PyPI - Python中文网
- 电子元器件简介——芯片封装篇
- Springboot常使用配置属性
- 立方体三维之立方体平行投影
- Java面试锦囊(四)
- linux现代时间轮算法,linux2.6定时器的时间轮算法分析
热门文章
- iOS用workspace和cocoapods管理多个项目
- java学习--基础知识阶段性总结--网络编程
- [BZOJ 2654]tree(陈立杰)
- hihocoder 1183 割点和割边
- Linux下出现ping:unknown host xxx.xxx问题的解决办法
- 和菜鸟一起深入学习国嵌实验之简单Makefile
- python真的可以减少工作强度_用Python写几行代码,一分钟搞定一天工作量,同事直呼:好家伙!...
- c java c时间格式处理_c:foreach 对时间类型进行格式化
- mysql 第几周 时间戳_php时间戳函数实现计算第几周,以及当天所在周的具体日期范围...
- html画特殊图形(待修改)