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

黑马程序员 交通灯案例相关推荐

  1. 黑马程序员————交通灯管理系统

    ----------------------ASP.Net+Android+IOS开发----------------------期待与您交流! 交通灯管理系统 交通灯管理系统的项目需求 模拟实现十字 ...

  2. 黑马程序员 交通灯管理系统

    ------- android培训.java培训.期待与您交流! ---------- 交通灯管理系统   模拟实现十字路口的交通灯管理系统逻辑,具体需求如下: 异步随机生成按照各个路线行驶的车辆. ...

  3. 黑马程序员——交通灯管理系统

    ----------- android培训.java培训.java学习型技术博客.期待与您交流! ------------ 交通灯管理系统   模拟实现十字路口的交通灯管理系统逻辑,具体需求如下: Ø ...

  4. 黑马程序员—交通灯管理系统

    ---------------------- JavaEE+Android.Java培训.期待与您交流! ---------------------- 一.需求 模拟实现十字路口的交通灯管理系统逻辑, ...

  5. 黑马程序员-----------------交通灯管理系统

    ------- android培训.java培训.期待与您交流! ---------- 交通灯管理系统 · Concurrent [kən'kʌr(ə)nt]adj. 并发的:一致的:同时发生的 ·  ...

  6. 黑马程序员---交通灯管理系统

    ------- android培训.java培训.期待与您交流! ---------- 此项目是张孝祥老师的名作,在项目 里面张孝祥老师生动的运用了枚举来完成此项目,值得学习,望各位游客,认真观看,吸 ...

  7. 黑马程序员—交通管理系统

    ------- android培训.java培训.期待与您交流! ---------- 一.项目需求 1.模拟实现十字路口的交通灯管理系统逻辑,具体有以下需求如下: 由南向而来去往北向的车辆 ---- ...

  8. 黑马程序员:C++案例(基于STL实现演讲比赛流程管理系统)

    1.1.比赛规则 学校举行一场演讲比赛,共有12个人参加,比赛共两轮,第一轮为淘汰赛,第二轮为决赛 每名选手都有对应的编号,如10001~10012 比赛方式:分组比赛,每组6个人: 第一轮分为两个小 ...

  9. b站 4天从零玩转jQuery【黑马程序员】部分案例代码_表格添加和删除案例

    这个是两个视频的内容写在一起了 1.下午07-案例-表格删除 2.下午10-案例-动态数据添加和删除 应该就是这两个视频. <!DOCTYPE html> <html>< ...

最新文章

  1. 十三、进程互斥的软件实现方法
  2. 官方解读,谷歌“T5”模型,如何突破迁移学习局限,实现多基准测试SOTA
  3. bool转nsnumber ios_iOS 的 NSNumber(对基本数据类型) NSValue(对结构体) 的装箱
  4. 传阿里旗下蚂蚁集团拟上市集资300亿美元,最快9月IPO
  5. 时间轴ui设计_我应该在UI设计上花更多时间吗?
  6. css grid随页面大小_前端开发中各种设置CSS间距的优点缺点及实例「实践」
  7. 用c语言编写六边形游戏,玩了这款搞花样的一笔画游戏,我的发量已经有点保不住了...
  8. 网络盒子android系统版本怎样刷机,【当贝市场】一键通IPTV盒刷Android系统教程
  9. Nxlog 配置总结
  10. HyperX旋火游戏鼠标推荐——轻量化鼠标设计界的艺术品
  11. 高速光通信-调制概述
  12. 一个视频分割为多个视频片段
  13. 如何用Python获取网页指定内容
  14. 奇迹暖暖安卓鸿蒙互通吗,奇迹暖暖安卓和ios互通吗 奇迹暖暖苹果和安卓能一起玩吗...
  15. 惠普笔记本恢复出厂系统
  16. 实现条码枪的无焦点扫码
  17. 单模光电转换器怎么接_光纤收发器(网桥,接口转换器),单模光纤收发器
  18. C语言画奥运五环以及五角星
  19. 动态加载script 加载完成回调事件
  20. Tensorflow教程

热门文章

  1. 2022-2028年中国基金业投资分析及前景预测报告
  2. 非本地类型不能定义方法 cannot define new methods on non-local type time.Duration
  3. HA: InfinityStones靶机渗透测试
  4. Bert系列(二)——源码解读之模型主体
  5. pytorch之expand,gather,squeeze,sum,contiguous,softmax,max,argmax
  6. 使用注解开发SpringMVC详细配置教程
  7. 在Cuda上部署量化模型
  8. NNVM AI框架编译器
  9. 电子设计搜索引擎引入分析和见解
  10. Ubuntu 系统如何修改主机名