黑马程序员-交通灯管理系统分析

---------------------- <a href="http://edu.csdn.net"target="blank">ASP.Net+Android+IOS开发</a>、<a href="http://edu.csdn.net"target="blank">.Net培训</a>、期待与您交流! ----------------------

模拟实现十字路口的交通灯管理系统逻辑,具体需求如下:

异步随机生成按照各个路线行驶的车辆。

例如:

由南向而来去往北向的车辆 ---- 直行车辆

由西向而来去往南向的车辆 ---- 右转车辆

由东向而来去往南向的车辆 ---- 左转车辆

。。。

信号灯忽略黄灯,只考虑红灯和绿灯。

应考虑左转车辆控制信号灯,右转车辆不受信号灯控制。

具体信号灯控制逻辑与现实生活中普通交通灯控制逻辑相同,不考虑特殊情况下的控制逻辑。

注:南北向车辆与东西向车辆交替放行,同方向等待车辆应先放行直行车辆而后放行左转车辆。

每辆车通过路口时间为1秒(提示:可通过线程Sleep的方式模拟)。

随机生成车辆时间间隔以及红绿灯交换时间间隔自定,可以设置。

不要求实现GUI,只考虑系统逻辑实现,可通过Log方式展现程序运行结果。

这是联想利泰的一道面试题:相关代码全部在http://blog.csdn.net/zhangxiaoxiang/article/details/6273384。下面我主要说思路。

1.本题目重点在于行车路线问题,日常生活中人们很少注意到十字路口处汽车的行车路线有什么规律(当然也与部分司机不遵守交通规则有关),行车路线一共有12条,按方向我们分为4组。

组1:南向北、南向东、南向西

组2:东向西、东向北、东向南

组3:西向东、西向南、西向北

组4:北向南、北向东、北向西

仔细观察就会发现,南向东、东向北、北向西、西向南这4条路线均为右转,按照中国的交通规则,这4条路线可以不受红绿灯的控制,所以编写程序时可以不考虑这4条路线。现在只留下8条路线。如下:

组1:南向北、南向西

组2:东向西、东向南

组3:西向东、西向北

组4:北向南、北向东

然后再观察,以南北向为例,南向北和北向南在真实路面上是同时发生的,南向西和北向东也是同时发生的。东西方向与此类似。所以只需考虑4条路线,如下:

组1:南向北(北向南)

组2:南向西(北向东)

组3:东向西(西向东)

组4:东向南(西向北)

编程时仅需考虑这4条路线,只要这4条路线走的通,12条路线的问题就得到了解决。编程时这4条路线应依次循环执行。

2.其次是灯的问题,灯与路线对应,既然已经剩下4条路线考虑,那么灯也只有4个灯。这4个灯与路线对应如下:

组1:南向北(北向南)灯A

组2:南向西(北向东)灯B

组3:东向西(西向东)灯C

组4:东向南(西向北)灯D

灯亮灭顺序为灯A绿-B绿-C绿-D绿,然后循环。一次只能有一个灯为绿。

以面向过程方法分析,编写程时只需将这4个交通灯依次变绿,然后在某个交通灯变绿的时候加上相关处理程序即可。编程时为每个灯变绿的事件中加上相关处理程序,主程序中依次让4个交通灯变绿即可。

以上是一个思路分析,考虑JAVA面向对象特点,若开始就以面向对象方法分析,思路不变,但代码更加复杂,相关面向对象代码参见:http://blog.csdn.net/zhangxiaoxiang/article/details/6273384。

---------------------- <a href="http://edu.csdn.net"target="blank">ASP.Net+Android+IOS开发</a>、<a href="http://edu.csdn.net"target="blank">.Net培训</a>、期待与您交流! ----------------------

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值