JAVA高新技术-交通灯管理-----黑马程序员
来源:互联网 发布:linux c 定时器 编辑:程序博客网 时间:2024/05/22 00:11
ASP.Net+Android+IOS开发------期待与您交流
<交通灯管理总结>
交通灯管理总结:
交通灯管理系统
1.项目需求
1)异步随机生成按照各个路线行驶的车辆。
2)信号灯忽略黄灯,只考虑红灯和绿灯
3)应考虑左转车辆控制信号灯,右转车辆不受信号灯控制
4)具体信号灯控制逻辑与现实生活中普通交通灯控制逻辑相同,不考虑特殊情况下的控制逻辑。
注:南北向车辆与东西向车辆交替放行,同方向车辆应该先放行直行车辆而后放行左转车辆。
2.面向对象分析与设计
有红绿灯的控制系统、汽车、路线。
设计示意图如下:
下面是代码和步骤
1)对象灯的设计 因为一共只有12个灯,所以应该用枚举。3.代码细节 1)Road类的编写 属性1:List<String> vechicles = new ArrayList<String>(); 属性2:String name = null; 构造函数: 1)Road(String name) 路的名字 2)产生车辆 ExecutorService pool = Executors.newSingleThreadExecutor(); pool.execute(new Runnable(){ public void run(){ for(int i=1;i<1000;i++) { Thread.sleep((new Random().nextInt(10)+1)*1000); vechicles.add(Road.this.name + ":" + i); } } }); 3)开始行使车辆,假设都是绿灯,后面再进行修改 ScheduledExecutorService timer = Executors.newScheduledThreadPool(1); timer.scheduleAtFixedRate( new Runnable(){ public void run(){ //1. if(vechicles.size()>0){ boolean lighted = true;//需要改写 boolean lighted = Lamp.valueOf(Road.this.name).isLighted(); if(lighted) { System.out.println(vechicles.remove(0) + "is travesing !"); } } } }, 1, 1, TimeUnit.SECONDS); 2)Lamp类的编写(Enum) public enum Lamp{ S2N("N2S","S2W",false),S2W("N2E","E2W",false),E2W("W2E","E2S",false),E2S("W2N","S2N",false), N2S(null,null.false),N2E(null,null.false),W2E(null,null.false),W2N(null,null.false), S2E(null,null,true),E2N(null,null,true),N2W(null,null,true),W2S(null,null,true); private Lamp(Lamp opposite,String next,boolean lighted) { this.opposite = opposite; } private Stirng next; private boolean lighted;//是否是绿灯 private String opposite; public boolean isLighted(){ } public void light(){ this.lighted = true; if(opposite != null) Lamp.valueOf(opposite).light(); System.out.println(name() + "lamp is green;下面应该有6个方向上的车"); } public Lamp blackOut(){ this.lighted = false; if(opposite != null) Lamp.valueOf(opposite).blackOut(); Lamp nextLamp = null; if(next!=null) { nextLamp = Lamp.valueOf(next); System.out.println("绿灯从" + name() + "--->切换为" + next); Lamp.valueOf(next).light(); } return nextLamp; } } 3)LampController类 灯控制器 属性:Lamp currentLamp; 构造函数: 1.初始化灯状态 currentLamp = Lamp.S2N; currentLamp.light(); 2.运行灯系统 Executors.newScheduledThreadPool(1).scheduleAtFixedRate( new Runnable(){ public void run(){ currentLamp.blackOut(); } }, 10, 10, TimeUnit.SECONDS); 4)主函数 S2N,S2N,E2W,E2S,N2S,N2E,W2E,W2N,S2E,E2N,N2W,W2S String [] directions = new String[]{S2N,S2N,E2W,E2S,N2S,N2E,W2E,W2N,S2E,E2N,N2W,W2S}; for(int i=0;i<directions.length;i++){ new Road(directions[i]); } new LampContoller();
系统总结如下:
交通灯管理系统,需画图,才能更清晰明白整个过程。首先要知道,所以方向的车无论何时都是可以右转弯的。
即右转弯不受交通灯约束。也就是一直是绿灯。然后就是
(1)当S-N为绿灯时,此时多出两个方向可以行车,即N-S方向和S-N方向。加上之前所以方向右转弯的方向,一共
就有6个方向可以行车。即:N-S,S-N,S-E,E-N,N-W,W-S方向为绿灯。
(2)接着,S-N变为红灯,S-W为绿灯,即南边左转弯同行,此时,北边左转弯也通行,与四个右转弯通行。即:
S-W,N-E,S-E,E-N,N-W,W-S方向为绿灯。
(3)当S-W变为红灯时,W-E为绿灯,即东西方向可以通行,加上所有右转弯方向还是有6个方向可以行车。即:
W-E,E-W,S-E,E-N,N-W,W-S方向为绿灯。
(4)当W-E变为红灯时,W-N为绿灯,此时E-S也为绿灯。即东西方向的左转弯方向通行,加上所有右转弯方向,即:
W-N,E-S,S-E,E-N,N-W,W-S方向为绿灯。
此后,就一直在循环做上面这四个步骤。简单用语言描述:因为所有右转弯车辆都是可以通行的,所以这里不再叙述。
先是,南北方向通行,接着是南北方向左转弯通行,然后是东西方向通行,最后是东西左转弯通行。只要清楚了这个过程。
自己总结:
a, 面向对象的思维去解决问题。
b, 编写Lamp类因为交通灯个数固定,即方向。一共12个。所以这里用到枚举。还有就是每个交通灯之间的关系。相反方向的交通灯状态是一样的,然后当前交通灯与下一个交通灯互斥,或者说是锁的关系。
c,然后就是用到了Executors工具类,用来创建一个线程,这个线程特点是每隔一段时间就调用一次。这里时间可以自己设定。
ASP.Net+Android+IOS开发------期待与您交流
详细请查看:http://edu.csdn.net
- JAVA高新技术-交通灯管理-----黑马程序员
- 黑马程序员-高新技术-交通灯管理
- 黑马程序员——Java高新技术---交通灯管理系统
- 黑马程序员_Java高新技术_交通灯管理系统
- 黑马程序员-java 交通灯管理系统
- 黑马程序员--java 交通灯管理系统
- 黑马程序员---交通灯管理系统【java】
- [黑马程序员]--Java语言交通灯管理系统
- 黑马程序员-java 交通灯管理系统
- 黑马程序员-java交通灯管理系统
- 黑马程序员 Java 交通灯管理系统
- 黑马程序员--JAVA交通灯管理系统项目
- 黑马程序员--java技术--交通灯管理系统
- 黑马程序员 JAVA交通灯管理系统
- 黑马程序员-Java交通灯管理系统
- 黑马程序员—java交通灯管理系统
- 黑马程序员: 交通灯管理
- 黑马程序员----交通灯管理
- JACOB部署问题
- Qt学习笔记002
- 完美解决PANIC: Could not open:安卓模拟器打不开问题
- ARM地址重映射
- C++记录精确时间-QueryPerformanceFrequency()
- JAVA高新技术-交通灯管理-----黑马程序员
- 设计模式之代理模式
- C#入门经典—第五章
- 用“UL”避免Keil C51大整数常量运算溢出错误
- 用GDB调试程序(一)
- perl 去除一对()中的中文字符及括号本身
- OA项目之操作EXCEL导出数据报表的类
- 对360通讯录的反编译分析
- 计算机视觉牛人(最早在自动化所论坛上发现的)