----------- android培训、java培训、java学习型技术博客、期待与您交流! ------------
本题目其实就是一个十字路口的问题:
要求中:有信号等为黄色的时候的忽略的。
如果是从南边来的车 那这辆车的方向有四个。
如果是从北边来的车 那这辆车的方向有四个
如果是从西边来的车 那这辆车的方向有四个
如果是从东边来的车 那这辆车的方向有四个
也就是说现在的方向一共加起来有12个。
这个时候,通常车往右边转的是不受信号灯控制的。因此只要是往右边转弯那这个车
就是不受信号灯控制的。
因为车通过路口的时间为一秒钟,以此这就可以通过线程的方式来表示这种方式
这张图就是整个方向的表示,现在假设每条路线都有一个交通灯的指示,而且往右走的必须都是一直亮的状态。
因为视频中介绍谁拥有了数据那就是拥有了操作这个数的方法。这个时候知道了,车完全不是一个对象,我们不可能建立一个关于车的类,因为在路上车只考虑了路上少了一辆车,或者是多了一辆车的,这个时候对象就是:信号灯,控制信号的的系统,汽车,路,
系统中有12个方向上的灯,这个时候要用到lamp。因为这个地方要根据名字就可以知道灯的实例对象。
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);
S2N、S2W、E2W、E2N这四个方向上的Lamp对象以此为light。
1. 这个十字路口只有四个信号灯,并且只有一个系统来控制。所以 LampController实单例。
2. ScheduledExecutorService timer = Executors.newScheduledThreadPool(1);
3. timer.scheduleAtFixedRate(new Runnable() {
4. public void run() {
5. currentLamp = currentLamp.blackOut(); } },
6. 10, 10,
7. TimeUnit.SECONDS);
8. }
多线程:LampController对象的start方法中将当前灯变绿,然后启动一个定时器,每隔10秒将当前灯变红和将下一个灯变绿。
视频中介绍:nextLampName和oppositeLampName属性应该为为null,以便防止死循环。
下面的是程序运行的部分结果:
N2S_1 is traversing !
S2N_1 is traversing !
N2W_1 is traversing !
S2N_2 is traversing !
E2N_1 is traversing !
S2E_1 is traversing !
S2N_3 is traversing !
N2S_2 is traversing !
S2N_4 is traversing !
public class MainClass { public static void main(String[] args) { String[] directions = new String[] { "S2N", "S2W", "E2W", "E2S", "N2, 2. "N2E", "W2E", "W2N", "S2E", "E2N", "N2W", "W2S" }; 3. for (int i = 0; i < directions.length; i++) { 4. new Road(directions[i]); 5. } new LampController(); 6. } 7.
在这段代码中:可以知道要产生一个交通灯管理系统,和一个有12个方向的的转向。
以此通过以上的代码分析可知:南向北的方向运行、由北边向西边的方向正在运行。
由东向北,由南向东运行。
线程2:由南向北边的车正在运行。由北边向南边运行。
线程3:由南向北运行。
LampController对象的start方法中将当前灯变绿,然后启动一个定时器,。
绿灯从S2N-------->切换为S2W
N2E lamp is green-----有六个方向的车经过
S2W lamp is green-----有六个方向的车经过
W2S_1 is traversing !
S2E_2 is traversing !
N2W_2 is traversing !
S2W_1 is traversing !
W2S_2 is traversing !
N2E_1 is traversing !
N2E_2 is traversing !
N2E_3 is traversing !
S2W_2 is traversing !
W2S_3 is traversing !
E2N_2 is traversing !
S2E_3 is traversing !
E2N_3 is traversing !
S2E_4 is traversing !
不断的有车的增加和车的消失来表示了车的运行。其中程序的运行就是表示了方向的畅通。
类似于上一个运行的方式:
视频中的介绍了rode类,主要的类,还有就是LampController类
还有就是枚举。
----------- android培训、java培训、java学习型技术博客、期待与您交流! ------------