黑马程序员 交通灯案例
---------------------- android培训、java培训、期待与您交流! ----------------------
通过张老师的交通灯的例子我认识到了很多:首先是要结合现实生活,明白交通灯的的逻辑,说实话在没听老师的课之前我真不知道交通灯的具体逻辑,其次认识到了画图的重要性,单靠想,自己想一会就把自己绕进去了,画图无疑是解决问题非常好的方法。 再次学到了面向对象的设计技巧。好了,下面来看这道题。
1、对象设计:设计一个Road对象操作
设计一个Road类
思路:1.创建一个单线程,模拟车子出现的过程、
2.检查是否为绿灯。
1 public class Road { 2 private List<String> vechicles = new ArrayList<String>(); 3 4 private String name =null; 5 public Road(String name){ 6 this.name = name; 7 8 //模拟车辆不断随机上路的过程 9 ExecutorService pool = Executors.newSingleThreadExecutor(); 10 pool.execute(new Runnable(){ 11 public void run(){ 12 for(int i=1;i<1000;i++){ 13 try { 14 Thread.sleep((new Random().nextInt(10) + 1) * 1000); 15 } catch (InterruptedException e) { 16 e.printStackTrace(); 17 } 18 vechicles.add(Road.this.name + "_" + i); 19 } 20 } 21 22 }); 23 25 ScheduledExecutorService timer = Executors.newScheduledThreadPool(1); 26 timer.scheduleAtFixedRate( 27 new Runnable(){ 28 public void run(){ 29 if(vechicles.size()>0){ 30 boolean lighted = Lamp.valueOf(Road.this.name).isLighted(); 31 if(lighted){ 32 System.out.println(vechicles.remove(0) + " is traversing !"); 33 } 34 } 35 36 } 37 }, 38 1, 39 1, 40 TimeUnit.SECONDS); 41 42 } 43 }
灯一共有十二种情况和路情况一样 定义灯的枚举
枚举的value方法。
package traffic;public enum Lamp {S2N("N2S","S2W",false),S2W("N2E","E2N",false),E2W("W2E","E2S",false),E2S("W2N","W2S",false),N2S(null,null,false),N2E(null,null,false),W2E(null,null,false),W2N(null,null,false),S2E(null,null,false),E2N(null,null,false),N2W(null,null,false),W2S(null,null,false);private boolean lighted;//对应的灯private String opposite;//下一个灯private String next;private Lamp(String opposite,String next,boolean lighted){this.opposite =opposite;this.next=next;this.lighted=lighted;}private Lamp(){}public boolean isLighted(){return lighted;}public void light(){this.lighted=true;if(opposite!=null){Lamp.valueOf(opposite).lighted=true;System.out.println(name() + " lamp is green,下面总共应该有6个方向能看到汽车穿过!");}}public Lamp blackOut(){this.lighted =false;if(opposite!=null){Lamp.valueOf(opposite).lighted=false;}Lamp nextLight =Lamp.valueOf(next);System.out.println("绿灯从" + name() + "-------->切换为" + next); if(next!=null)nextLight.lighted=true;return nextLight;}}
定义灯的控制类
package traffic;import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit;public class LampController {private Lamp currentLamp;public LampController(){currentLamp =Lamp.S2N;currentLamp.light();ScheduledExecutorService timer = Executors.newScheduledThreadPool(1);timer.scheduleAtFixedRate(new Runnable(){public void run(){LampController.this.currentLamp =currentLamp.blackOut();}}, 10, 10, TimeUnit.SECONDS);}}
最后是控制的主类
package traffic;public class MainClass {public static void main(String[] args){String[] directions ={"S2N","S2W","E2W","E2S","N2S","N2E","W2E","W2N","S2E","E2N","N2W","W2S"};for(String direction:directions){new Road(direction);}new LampController();}}
总结:枚举的知识环节薄弱,有待加强。及时学习新知识。
---------------------- android培训、java培训、期待与您交流! ---------------------- 详细请查看:http://edu.csdn.net/heima
转载于:https://www.cnblogs.com/malinkang1989/archive/2012/06/21/2557841.html
黑马程序员 交通灯案例相关推荐
- 黑马程序员————交通灯管理系统
----------------------ASP.Net+Android+IOS开发----------------------期待与您交流! 交通灯管理系统 交通灯管理系统的项目需求 模拟实现十字 ...
- 黑马程序员 交通灯管理系统
------- android培训.java培训.期待与您交流! ---------- 交通灯管理系统 模拟实现十字路口的交通灯管理系统逻辑,具体需求如下: 异步随机生成按照各个路线行驶的车辆. ...
- 黑马程序员——交通灯管理系统
----------- android培训.java培训.java学习型技术博客.期待与您交流! ------------ 交通灯管理系统 模拟实现十字路口的交通灯管理系统逻辑,具体需求如下: Ø ...
- 黑马程序员—交通灯管理系统
---------------------- JavaEE+Android.Java培训.期待与您交流! ---------------------- 一.需求 模拟实现十字路口的交通灯管理系统逻辑, ...
- 黑马程序员-----------------交通灯管理系统
------- android培训.java培训.期待与您交流! ---------- 交通灯管理系统 · Concurrent [kən'kʌr(ə)nt]adj. 并发的:一致的:同时发生的 · ...
- 黑马程序员---交通灯管理系统
------- android培训.java培训.期待与您交流! ---------- 此项目是张孝祥老师的名作,在项目 里面张孝祥老师生动的运用了枚举来完成此项目,值得学习,望各位游客,认真观看,吸 ...
- 黑马程序员—交通管理系统
------- android培训.java培训.期待与您交流! ---------- 一.项目需求 1.模拟实现十字路口的交通灯管理系统逻辑,具体有以下需求如下: 由南向而来去往北向的车辆 ---- ...
- 黑马程序员:C++案例(基于STL实现演讲比赛流程管理系统)
1.1.比赛规则 学校举行一场演讲比赛,共有12个人参加,比赛共两轮,第一轮为淘汰赛,第二轮为决赛 每名选手都有对应的编号,如10001~10012 比赛方式:分组比赛,每组6个人: 第一轮分为两个小 ...
- b站 4天从零玩转jQuery【黑马程序员】部分案例代码_表格添加和删除案例
这个是两个视频的内容写在一起了 1.下午07-案例-表格删除 2.下午10-案例-动态数据添加和删除 应该就是这两个视频. <!DOCTYPE html> <html>< ...
最新文章
- 十三、进程互斥的软件实现方法
- 官方解读,谷歌“T5”模型,如何突破迁移学习局限,实现多基准测试SOTA
- bool转nsnumber ios_iOS 的 NSNumber(对基本数据类型) NSValue(对结构体) 的装箱
- 传阿里旗下蚂蚁集团拟上市集资300亿美元,最快9月IPO
- 时间轴ui设计_我应该在UI设计上花更多时间吗?
- css grid随页面大小_前端开发中各种设置CSS间距的优点缺点及实例「实践」
- 用c语言编写六边形游戏,玩了这款搞花样的一笔画游戏,我的发量已经有点保不住了...
- 网络盒子android系统版本怎样刷机,【当贝市场】一键通IPTV盒刷Android系统教程
- Nxlog 配置总结
- HyperX旋火游戏鼠标推荐——轻量化鼠标设计界的艺术品
- 高速光通信-调制概述
- 一个视频分割为多个视频片段
- 如何用Python获取网页指定内容
- 奇迹暖暖安卓鸿蒙互通吗,奇迹暖暖安卓和ios互通吗 奇迹暖暖苹果和安卓能一起玩吗...
- 惠普笔记本恢复出厂系统
- 实现条码枪的无焦点扫码
- 单模光电转换器怎么接_光纤收发器(网桥,接口转换器),单模光纤收发器
- C语言画奥运五环以及五角星
- 动态加载script 加载完成回调事件
- Tensorflow教程
热门文章
- 2022-2028年中国基金业投资分析及前景预测报告
- 非本地类型不能定义方法 cannot define new methods on non-local type time.Duration
- HA: InfinityStones靶机渗透测试
- Bert系列(二)——源码解读之模型主体
- pytorch之expand,gather,squeeze,sum,contiguous,softmax,max,argmax
- 使用注解开发SpringMVC详细配置教程
- 在Cuda上部署量化模型
- NNVM AI框架编译器
- 电子设计搜索引擎引入分析和见解
- Ubuntu 系统如何修改主机名