黑马程序员__交通灯控制系统

---------------------- <a href="http://edu.csdn.net/heima" target="blank">android培训</a>、<a href="http://edu.csdn.net/heima" target="blank">java培训</a>、期待与您交流! ----------------------

交通灯控制系统
在学习这个面试题目的时候,我们应该先自己想想思路,看看自己能想到哪种程度,然后跟着张老师的思路学习,这样才能不但弄懂这道题,更重要的是要学会解题思路和方法。在这个视频中,我学到了更多的知识点和解题方法,如面向对象的思想,遇到有些问题可以画图让思路清晰,enum就是一个类,只不过他多了一些常量罢了,在合理的情况下让问题高度统一化等。
面向对象设计一条重要的经验:谁拥有数据,谁就对外提供操作这些数据的方法。例如:人在黑板上画圆
(圆有半径和圆心),列车司机紧急刹车(列车司机只是调用了列车的一个刹车方法,合适自己刹的车),售货员统计收获小票的金额(小票有数据,他就有统计的方法,),你把门关上了(你只是调用了门的关方法)等。

Road类的编写:
 每个Road对象都有一个name成员变量来代表方向,有一个vehicles成员变量来代表方向上的车辆集合。
 在Road对象的构造方法中启动一个线程每隔一个随机的时间向vehicles集合中增加一辆车(用一个“路线名_id”形式的字符串进行表示)。
 在Road对象的构造方法中启动一个定时器,每隔一秒检查该方向上的灯是否为绿,是则打印车辆集合和将集合中的第一辆车移除掉。
 ScheduledExecutorService timer =  Executors.newScheduledThreadPool(1);

Lamp类的编写:
 因为Lamp是固定的所以,我们可以用enum定义灯,
 每个Lamp对象中的亮黑状态用lighted变量表示,选用S2N、S2W、E2W、E2N这四个方向上的Lamp对象依次轮询变亮,Lamp对象中还要有一个oppositeLampName变量来表示它们相反方向的灯,nextLampName是下一个将要亮的灯,再用一个nextLampName变量来表示此灯变亮后的下一个变亮的灯。这三个变量用构造方法的形式进行赋值,因为枚举元素必须在定义之后引用,所以无法再构造方法中彼此相互引用,所以,相反方向和下一个方向的灯用字符串形式表示。 每个路的向右转弯的路上的lamp一直连,没有oppositeLampName;

LampController:等控制器,
 整个系统中只能有一套交通灯控制系统,所以,LampController类最好是设计成单例。
 LampController构造方法中要设定第一个为绿的灯。
 LampController对象的start方法中将当前灯变绿,然后启动一个定时器,每隔10秒将当前灯变红和将下一个灯变绿。
 Thread.sleep (new Random().nextInt(6)+1);暂停0-5之间的任意数
 List<String> vechicles=new ArrayList<String>();
         Vechicles.add(“abc”);
       System.out.println(  Vechicles.remove(0));
main方法:
 用for循环创建出代表12条路线的对象。
 接着再获得LampController对象并调用其start方法。
 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();

---------------------- <a href="http://edu.csdn.net/heima" target="blank">android培训</a>、<a href="http://edu.csdn.net/heima" target="blank">java培训</a>、期待与您交流! ----------------------

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值