先抛出需求:

  • 异步随机生成按照各个路线行驶的车辆。

例如:

由南向而来去往北向的车辆 ---- 直行车辆

由西向而来去往南向的车辆 ---- 右转车辆

由东向而来去往南向的车辆 ---- 左转车辆

。。。

  • 信号灯忽略黄灯,只考虑红灯和绿灯。
  • 应考虑左转车辆控制信号灯,右转车辆不受信号灯控制。
  • 具体信号灯控制逻辑与现实生活中普通交通灯控制逻辑相同,不考虑特殊情况下的控制逻辑。

注:南北向车辆与东西向车辆交替放行,同方向等待车辆应先放行直行车辆而后放行左转车辆。

  • 每辆车通过路口时间为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编程-交通灯管理器设计流程。相关推荐

  1. Java编程基础 - 布局管理器

    1. 布局管理器介绍 组件在容器(比如JFrame)中的位置和大小是由布局管理器来决定的.所有的容器都会使用一个布局管理器,通过它来自动进行组件的布局管理. java共提供了五种布局管理器:流式布局管 ...

  2. JMeter学习笔记--使用HTTP信息头管理器

    使用HTTP信息头管理,可以帮助测试人员设定JMeter发送的HTTP请求头所包含的信息.HTTP信息头中包含有"User-Agent"."Pragma".&q ...

  3. java学习笔记 java编程思想 第7章 复用类

    文章目录 7.1 组合语法 练习1 7.2 继承语法 7.2.1 初始化基类 练习3 练习4 练习5 带参数的构造器 练习6 练习7 练习8 练习9 练习10 7.3 代理 练习11 7.4 结合使用 ...

  4. java学习笔记 java编程思想 第6章 访问权限控制

    文章目录 6.1 包:库单元(the library unit) 6.1.1 代码组织 6.1.2 创建独一无二的包名 练习1 练习2 6.1.3 定制工具类 6.1.4 用import改变行为 练习 ...

  5. 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 ...

  6. 基于单片机的智能交通灯系统的设计

    目 录 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 ...

  7. JAVA桌面UI编程之布局管理器

    布局管理器 为了跨平台java引入了布局管理器来管理界面,JAVA一共有6种布局管理器,下面是介绍 BorderLayout 界面分东西南北中5个方向,最多只能显示5个控件,默认放入中间,下面的程序将 ...

  8. 编程学习笔记之python深入之装饰器案例及说明文档[图]

    编程学习笔记之python深入之装饰器案例及说明文档[图] 装饰器即在不对一个函数体进行任何修改,以及不改变整体的原本意思的情况下,增加函数功能的新函数,因为这个新函数对旧函数进行了装饰,所以称为装饰 ...

  9. JDBC学习笔记03【JDBC事务管理、数据库连接池、JDBCTemplate】

    黑马程序员-JDBC文档(腾讯微云)JDBC笔记.pdf:https://share.weiyun.com/Kxy7LmRm JDBC学习笔记01[JDBC快速入门.JDBC各个类详解.JDBC之CR ...

最新文章

  1. Rsync服务让SLB下多台centos服务器文件同步更新
  2. python常用关键字意思_python基础之常用关键字总结
  3. can协议crc计算_CAN总线的升级版——CAN FD简介
  4. 基准对象object中的基础类型----列表 (四)
  5. Facebook、LinkedIn、Airbnb、Google专家聚首QCon,他们会带来什么?
  6. AMD收购Xilinx、Zoom为全体用户提供端到端加密、Facebook云游戏、苹果搜索引擎等|Decode the Week...
  7. Linux 修改用户名的主目录 家目录
  8. node在regedit配置哪个位置_Spring Boot 2.x基础教程:Spring Data JPA的多数据源配置
  9. 音视频开发(16)---海康IPC+NVR+EasyDarwin+EasyPusher+VLC实现Web实时播放RTSP视频
  10. SQL中DB2数据库修改某字段长度或类型
  11. modscan32做主站 一直显示MODBUS MESSAGE TIME-OUT
  12. 2021-07-08郝斌C语言笔记
  13. 批量给多个 Excel 工作薄文件中插入新的工作表 Sheet
  14. 日语语音识别_日语语音识别软件_日语语音识别在线 - 云+社区 - 腾讯云
  15. inflect java_Python lemminflect包_程序模块 - PyPI - Python中文网
  16. 电子元器件简介——芯片封装篇
  17. Springboot常使用配置属性
  18. 立方体三维之立方体平行投影
  19. Java面试锦囊(四)
  20. linux现代时间轮算法,linux2.6定时器的时间轮算法分析

热门文章

  1. iOS用workspace和cocoapods管理多个项目
  2. java学习--基础知识阶段性总结--网络编程
  3. [BZOJ 2654]tree(陈立杰)
  4. hihocoder 1183 割点和割边
  5. Linux下出现ping:unknown host xxx.xxx问题的解决办法
  6. 和菜鸟一起深入学习国嵌实验之简单Makefile
  7. python真的可以减少工作强度_用Python写几行代码,一分钟搞定一天工作量,同事直呼:好家伙!...
  8. c java c时间格式处理_c:foreach 对时间类型进行格式化
  9. mysql 第几周 时间戳_php时间戳函数实现计算第几周,以及当天所在周的具体日期范围...
  10. html画特殊图形(待修改)