---------------------- <a href="http://edu.youkuaiyun.com"target="blank">ASP.Net+Android+IOS开发</a>、<a href="http://edu.youkuaiyun.com"target="blank">.Net培训</a>、期待与您交流! ----------------------
模拟实现十字路口的交通灯管理系统逻辑,具体需求如下:
异步随机生成按照各个路线行驶的车辆。
例如:
信号灯忽略黄灯,只考虑红灯和绿灯。
应考虑左转车辆控制信号灯,右转车辆不受信号灯控制。
具体信号灯控制逻辑与现实生活中普通交通灯控制逻辑相同,不考虑特殊情况下的控制逻辑。
注:南北向车辆与东西向车辆交替放行,同方向等待车辆应先放行直行车辆而后放行左转车辆。
每辆车通过路口时间为1秒(提示:可通过线程Sleep的方式模拟)。
随机生成车辆时间间隔以及红绿灯交换时间间隔自定,可以设置。
不要求实现GUI,只考虑系统逻辑实现,可通过Log方式展现程序运行结果。
这是联想利泰的一道面试题:相关代码全部在http://blog.youkuaiyun.com/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.youkuaiyun.com/zhangxiaoxiang/article/details/6273384。
---------------------- <a href="http://edu.youkuaiyun.com"target="blank">ASP.Net+Android+IOS开发</a>、<a href="http://edu.youkuaiyun.com"target="blank">.Net培训</a>、期待与您交流! ----------------------