黑马程序员_通灯管理系统

---------------------- android培训java培训、期待与您交流! ----------------------

 

Traffic

在编程模拟实际问题的时候,一定要画图,张老师的路线图就很形象很具体。

     分析问题:这里面一共有12条路线。在这里我们并不需要体现车辆移动的过程,只是捕捉出车辆穿过路口的过程,也就是捕捉路上减少一辆车的过程,所以,这个车并不需要单独设计成为一个对象,用一个字符串表示就可以了。

     设计Lamp类的时候,需要用到枚举类,一共12个灯,用枚举比较方便,因为枚举中的一个元素就是枚举类的一个对象。需要定义不同走向的12个元素。除了右拐弯方向的其他8条路线的灯,它们是两两成对的,可以归为4组,所以,在编程处理时,只要从这4组中各取出一个灯,对这4个灯依次轮询变亮,与这4个灯方向对应的灯则随之一同变化,因此只有四个灯需要考虑。

    每个枚举元素各表示一个方向的控制灯,构造方法中的参数要用String,不然会出错,不能在对象定义前去调用该对象。

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

 

某个灯变绿时,它对应方向的灯也要变绿:

Lamp.valueOf(opposite).light();这里xxx.ValueOf()方法返回的是对象。

某个灯变红时,对应方向的灯也要变红,并且下一个方向的灯要变绿:Lamp.valueOf(opposite).blackOut(); nextLamp = Lamp.valueOf(next);nextLamp.light();

张老师最后运行的时候,这里出了点小错误

Lamp nextLamp= null;

              if(next != null){

                     nextLamp = Lamp.valueOf(next);

Road类中用到了计时器,要学自己写计时器。

控制器,控制路灯,设置了第一个灯为绿灯。要记住ScheduledExecutorService的用法,并需要用到计时器。

定时器:

ScheduledExecutorService  timer =  Executors.newScheduledThreadPool(1);

              timer.scheduleAtFixedRate(

                            new Runnable(){

                                   public  void run(){

                                          currentLamp = currentLamp.blackOut();

                                   }

                            },

                            10,

                            10,

                            TimeUnit.SECONDS);

     在主方法测试的时候,需要产生12个方向的路线。通过new LampController();产生整个交通系统。

    通过对张老师交通灯系统的学习,我更加清晰的了解了面向对象的分析与设计,在学习的工程中,张老师步步深入的编码方式给了我很多启发,写代码不是最难的,最难的是把问题分析透彻,比如有12条路线,需要分析4个灯,还有车的行驶方向和面对的灯与下组灯之间的联系。

 

 

---------------------- android培训java培训、期待与您交流! ----------------------

详细请查看:http://edu.csdn.net/heima 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值