黑马程序员2012.6.26.21.43

来源:互联网 发布:淘宝店铺怎么自己装修 编辑:程序博客网 时间:2024/06/05 07:24

---------------------- android培训、java培训、期待与您交流! ---------------------


交通灯管理系统:


今天把交通灯管理系统看了一下,刚开始觉得很难,无从下手,看过老师的视频以后啊,就感觉,思路真的太重要了。
要活学活用,就是先思考会用到哪方面的知识,那个体现出了是对象的特性,那个元素是数据。
同时还要和现实结合起来,就像交通灯,我以前竟然不知道在没有行走箭头表示的时候,路口的右拐不收红绿灯的控制。
又或者,平时根本没有注意过一个十字路口有多少条路线,以及他们的红绿灯变红变绿有什么关系。
现在看了视频,就感觉,其实只要系统逻辑上已经思考的很清楚了,那么这个系统可以用到的技术、知识就可以很快的定下来。


在定义Lamp时,每个Lamp元素代表一个方向上的灯,总共有12个方向,所有总共有12个Lamp元素。
这12Lamp元素中,每两个形成一组,一组灯同时变绿或变红,还有4个右拐的灯,每两个形成一组,一组灯同时变绿或变红,可以假想它们总是绿灯。


因为只有12个方向上的灯,这些方向都是固定的值,在这上面就用到了枚举,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);


每一次除了右拐的4个等全亮外,每次有对应的两个灯绿灯,或者红灯。然后依次4组对应的灯红或者绿。


枚举就是要让某个类型的变量的取值只能为若干个固定值中的一个。
否则,编译器就会报错,枚举可以让编译器在编译时就可以控制源程序中填写的非法值。
枚举类有value,valueOf,toString,ordinal等方法,她是一种特殊的类,其中的每个元素都是该类的一个实例对象。
每一个枚举的元素都是一个对象。




每个Road对象代表了一条路线,一共有12条路线,系统中要产生12个Road实例对象。
每条对象都会随机增加新的车辆((new Random().nextInt(10) + 1) * 1000),将这些车辆放到一个集合中保存。
每条路线每隔一秒都会检查控制本路线的灯是否为绿,如果是就将本路线保存车的集合中的第一辆车移除,即表示车穿过了路口。


每隔一秒检查对应的灯是否为绿,这个用到了计时器。
ScheduledExecutorService timer =  Executors.newScheduledThreadPool(1);


这个是他的scheduleAtFixedRate方法:
ScheduledFuture<?> scheduleAtFixedRate(Runnable command,
                                       long initialDelay,
                                       long period,
                                       TimeUnit unit)
command - 要执行的任务
initialDelay - 首次执行的延迟时间
period - 连续执行之间的周期
unit - initialDelay 和 period 参数的时间单位 


创建并执行一个在给定初始延迟后首次启用的定期操作,后续操作具有给定的周期;也就是将在 initialDelay 后开始执行,然后在 initialDelay+period 后执行,接着在 initialDelay + 2 * period 后执行,依此类推。


在lamp 的控制方法中,也定义了一个计时器,每个10秒将当前绿灯变为红灯,并让下一个方向的灯变绿


在主函数中产生12个方向的路线,将他们呢放到一个数组中,循环得到当前方向上的路线,LampController灯控制得到这条路线上的灯变绿,Road便开始增加车辆,移除车辆了 。


----------------------- android培训、java培训、期待与您交流! ----------------------