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

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


S2NS2WE2WE2N这四个方向上的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秒将当前灯变红和将下一个灯变绿。

 

 

视频中介绍:nextLampNameoppositeLampName属性应该为为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学习型技术博客、期待与您交流! ------------

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值