- 浏览: 10070 次
- 性别:
- 来自: 北京
文章分类
最新评论
交通灯管理系统
模拟实现十字路口的交通灯管理系统逻辑,具体需求如下:
异步随机生成按照各个路线行驶的车辆。
例如:
由南向而来去往北向的车辆 ---- 直行车辆
由西向而来去往南向的车辆 ---- 右转车辆
由东向而来去往南向的车辆 ---- 左转车辆
。。。
信号灯忽略黄灯,只考虑红灯和绿灯。
应考虑左转车辆控制信号灯,右转车辆不受信号灯控制。
具体信号灯控制逻辑与现实生活中普通交通灯控制逻辑相同,不考虑特殊情况下的控制逻辑。
注:南北向车辆与东西向车辆交替放行,同方向等待车辆应先放行直行车辆而后放行左转车辆。
每辆车通过路口时间为1秒(提示:可通过线程Sleep的方式模拟)。
随机生成车辆时间间隔以及红绿灯交换时间间隔自定,可以设置。
不要求实现GUI,只考虑系统逻辑实现,可通过Log方式展现程序运行结果。
设计思路:
首先将交通图画出来如下所示:
根据图,我们可以看出总共有12条行车路线,分别是:
S2N,N2S,E2W,W2E,S2W,N2E,W2N,E2S,S2E,E2N,N2W,W2S
确定都需创建什么对象:
1、12条路线也就对应12条路线对象,在每条路线上,车源源不断的不定期的开来,如当前路线的灯为绿灯,则车每隔1秒开走1辆
2、12条路线就对应12个灯对象,当一个线路的灯绿时,它的相反方向的灯也变绿,当它变红的时候,下一个灯及它相反风向的灯就会变绿,这种依次变绿的过程,是按一定顺序的,所以可以用一个枚举来定义这12个灯,每个灯应对应3个参数,它的相反方向的灯,它的下一个灯,及它的红绿状态
3、这12个灯,需要一个控制器,控制将灯变绿,隔多长时间再把它变红,右转弯的四个灯是常绿,不需要控制,剩余的8个灯,只需要控制4个灯:S2N,S2W,W2E,W2N即可,它们相反方向的灯的红绿状态在同一时间和它们一样
4、最后需要创建一个调度类,创建控制器对象,让控制器开始控制灯红绿交换,并启动上面的12条路对象,让上面的车根据控制器所控制的当前路线灯红绿的状态,开始“走走“来来。
Road代码:
package test.traffic; import java.util.*; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; public class Road { private String name=null; List<String> vehicle=new ArrayList<String>(); public Road(String name) { this.name=name; ExecutorService pool=Executors.newFixedThreadPool(1); pool.execute(new Runnable() { int i=1; @Override public void run() { while(i<1000) { vehicle.add(Road.this.name+"路线上的第"+(i++)+"辆车"); try { Thread.sleep((new Random().nextInt(10)+1)*1000); } catch (InterruptedException e) { e.printStackTrace(); } // TODO Auto-generated method stub } } }); pool.isShutdown(); ScheduledExecutorService timer= Executors.newSingleThreadScheduledExecutor(); timer.scheduleAtFixedRate(new Runnable() { @Override public void run() { boolean blue=Lamp.valueOf(Road.this.name).blue; if(vehicle.size()!=0) { while(blue) { System.out.println(vehicle.remove(0)+"正在通过十字路口!");/*remove(0):移除此列表中指定位置上的索引为0的元素,同时向左移动所有后续元素(将其索引减 1) 即移动第0个元素后,原第一个元素的索引就变成了0。 */ } // TODO Auto-generated method stub } } }, 1, 2, TimeUnit.SECONDS); }} Lamp(灯)代码: package test.traffic; enum Lamp { S2N("S2W",false,"N2S"),S2W("W2E",false,"N2E"),W2E("W2N",false,"E2W"),W2N("S2N",false,"E2S"), N2S("null",false,"null"),N2E("null",false,"null"),E2W("null",false,"null"),E2S("null",false,"null"), S2E(null,true,null),E2N(null,true,null),N2W(null,true,null),W2S(null,true,null); public boolean blue=true; String next=null; String opposite=null; private Lamp(String next,boolean blue,String opposite) { this.blue=blue; this.next=next; this.opposite=opposite; }; public boolean isLighted() { return blue; } public void blueLight() { blue=true; Lamp.valueOf(opposite).blue=true; System.out.println(this.name()+"灯和"+Lamp.valueOf(opposite).name()+ "灯变绿了"); } public Lamp redLight() { blue=false; Lamp.valueOf(opposite).blue=false; Lamp nextLamp=Lamp.valueOf(next); nextLamp.blueLight(); return nextLamp; } } LampController(灯得控制器)代码: package test.traffic; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; public class LampController { private Lamp currentLamp =Lamp.S2N; public LampController() { System.out.println("最多有6个方向的车可以通过"); currentLamp.blueLight(); ScheduledExecutorService timer=Executors.newScheduledThreadPool(1); timer.scheduleAtFixedRate(new Runnable() { @Override public void run() { currentLamp=currentLamp.redLight(); } }, 10, 15, TimeUnit.SECONDS); } } 启动代码: package test.traffic; public class Scheduler { public static void main(String[] args) { /*产生12个方向的路线*/ String [] directions = new String[]{ "S2N","S2W","E2W","E2S","N2S","N2E","W2E","W2N","S2E","E2N","N2W","W2S" }; for(int i=0;i<directions.length;i++){ new Road(directions[i]); } /*产生整个交通灯系统*/ new LampController(); }
---------------------- android培训、java培训、期待与您交流! ---------------------- 详细请查看:http://edu.csdn.net/heima
发表评论
-
黑马程序员----多线程
2011-12-26 20:01 634多线程 ---------------------- and ... -
黑马程序员----银行业务调度系统
2011-12-25 01:54 588银行业务调度系统 --------------------- ... -
黑马程序员----类加载器
2011-12-25 01:43 719类加载器 ---------------------- a ... -
黑马程序员----反射
2011-12-25 01:41 631反射 ---------------------- ... -
黑马程序员----集合
2011-12-20 22:23 325集合 ---------------------- ... -
黑马程序员----单态和垃圾回收
2011-12-19 19:53 698单态和垃圾回收 ---------------------- ... -
黑马程序员----数组
2011-12-17 23:05 425数组 ---------------------- ... -
黑马程序员----函数
2011-12-17 22:55 592函数 ---------------------- andr ... -
黑马程序员----break和continue
2011-12-17 22:51 666break和continue --------------- ... -
黑马程序员-----循环
2011-12-17 22:46 532java循环的实现方式 ---- ... -
黑马程序员---switch
2011-12-17 22:21 578一. Switch ------------------ ...
相关推荐
NULL 博文链接:https://840198532-qq-com.iteye.com/blog/1492498
交通管理在线服务-交通管理在线服务系统-交通管理在线服务系统源码-交通管理在线服务管理系统-交通管理在线服务管理系统java代码-交通管理在线服务系统设计与实现-基于springboot的交通管理在线服务系统-基于Web的...
课程设计---基于51单片机的交通灯设计.docx课程设计---基于51单片机的交通灯设计.docx课程设计---基于51单片机的交通灯设计.docx课程设计---基于51单片机的交通灯设计.docx课程设计---基于51单片机的交通灯设计.docx...
课程设计---基于51单片机的交通灯设计.pdf课程设计---基于51单片机的交通灯设计.pdf课程设计---基于51单片机的交通灯设计.pdf课程设计---基于51单片机的交通灯设计.pdf课程设计---基于51单片机的交通灯设计.pdf课程...
数电课程设计---交通灯定时控制系统的设计、制作.docx数电课程设计---交通灯定时控制系统的设计、制作.docx数电课程设计---交通灯定时控制系统的设计、制作.docx数电课程设计---交通灯定时控制系统的设计、制作.docx...
深度学习--交通灯数据集深度学习--交通灯数据集深度学习--交通灯数据集深度学习--交通灯数据集深度学习--交通灯数据集深度学习--交通灯数据集深度学习--交通灯数据集深度学习--交通灯数据集深度学习--交通灯数据集...
毕业设计- 基于AT89c51单片机的交通灯控制系统设计.pdf毕业设计- 基于AT89c51单片机的交通灯控制系统设计.pdf毕业设计- 基于AT89c51单片机的交通灯控制系统设计.pdf毕业设计- 基于AT89c51单片机的交通灯控制系统设计...
毕业设计- 基于AT89c51单片机的交通灯控制系统设计.docx毕业设计- 基于AT89c51单片机的交通灯控制系统设计.docx毕业设计- 基于AT89c51单片机的交通灯控制系统设计.docx毕业设计- 基于AT89c51单片机的交通灯控制系统...
数字逻辑---交通灯系统设计(HUST) 1-12关 头歌 【一个代码可通12关】 1.7段数码管驱动电路设计 2.4位无符号比较器设计 3.8位无符号比较器设计 4.1位2路选择器设计 5.8位2路选择器设计 6.双向BCD计数器状态机设计 7....
交通管理在线服务-交通管理在线服务系统-交通管理在线服务系统源码-交通管理在线服务管理系统-交通管理在线服务管理系统java代码-交通管理在线服务系统设计与实现-基于springboot的交通管理在线服务系统-基于Web的...
基于西门子S7-200PLC的交通灯控制系统的设计.pdf基于西门子S7-200PLC的交通灯控制系统的设计.pdf基于西门子S7-200PLC的交通灯控制系统的设计.pdf基于西门子S7-200PLC的交通灯控制系统的设计.pdf基于西门子S7-200PLC...
数字逻辑--交通灯系统设计实训.txt
嵌入式系统开发与应用--交通灯系统实训
《微机原理与接口技术》课程设计--交通灯系统设计.pdf《微机原理与接口技术》课程设计--交通灯系统设计.pdf《微机原理与接口技术》课程设计--交通灯系统设计.pdf《微机原理与接口技术》课程设计--交通灯系统设计.pdf...
数字逻辑---交通灯系统设计(HUST),全部12个关卡的答案,绝对正确!全网最低价! 看我看我:一定要注意细节,不要1分钟就把作业全做完了,会被平台查到,10分钟完成一关比较合理,这样子就不会被老师发现啦~自己...
黑马程序员交通灯管理系统设计代码样例,共有3各类 Lamp,交通灯类 LampController,交通灯控制器类 Road,路线类 RunDemo,运行实例类
计算机组成原理实验-数字逻辑---交通灯系统设计(HUST)-12个题
西门子PLC S7-200在十字路口交通灯控制系统中的应用pdf,西门子PLC S7-200在十字路口交通灯控制系统中的应用