黑马程序员训练营:交通灯系统

时间:2021-08-04 21:47:25

 

 

 

 

一、系统的运行逻辑

一个十字路口一般情况下有两条双向车道道路交叉形成。这样的十字路口自然地将两条道路分成了四个不同的方向,其中每一个方向上车辆都有到达其他三个方向的需求,总共存在12种不同向量的通行需求。

12种需要不能同时满足,必须分时地获得满足。具体的分时规则为:

1、直线通行:当其中一条道路上进行直线通行时,另一条道路上的直线通行必须阻塞。

2、左转通行:当前所在道路停止通行时,方可进行。同时,另一条道路也放开通行。

3、右转通行:任何时间都可通行。

左转和右转的通行规则与道路的设计规则有关。一般将每个方向道路的出口设置在右边,进口在左边(不同国家的习惯可能相反)。这样车道和通行方向如下图所示:

黑马程序员训练营:交通灯系统

很显然,右转通行刚好与另一条道路的车道方向保持一致,并且不与其他任何方向通行相冲突,因此任何时候都可以通行;而对于左转通行虽然也与另一条道路的通行车道方向保持一致,但却与自身道路所在的另一车道的通行相冲突,因此必须等待,直到其通行结束。

据上,可以归纳出系统运行的几个逻辑:

1、相同道路上的直线通行时间一致。

    2、不同道路上的直线通行时间相互排斥。

    3、一条道路上的左转通行与另一条道路上的直线通行时间一致。

    4、右转通行恒成立。

    5、任何时候都存在八个方向准予通行。

 

对于12个不同向量的通行需求分别设置12个指示灯,绿灯行,红灯则停。灯的值将由专门的控制系统负责调节,这样整个系统就能很好的运行了。

事实上,系统不需要去控制所有灯的显示。根据上述分析,我们知道:

1、对于4个右转的指示灯应该常绿,无需系统进一步维护。

2、对于4个左转的指示灯,其是依赖于直线指示灯的值的,所以其可以交由直线指示灯去控制。

3、对于直线方向相反的两个指示灯的值应该相同,因此其中一个可以维护另一个的值。

4、除了右转方向的灯可以常绿外,其他的灯都应该能够控制自己绿的时间。

5、系统只要负责在不同直线方向的两个灯的绿红之间进行切换即可。

二、系统对象分析

1、灯

1)数据成员:

    灯的名字:作为灯的唯一标识。

    可通行标识:绿或者红(真假分别表示)。

    相反方向灯:控制与其直线相反方向灯的状态。

    下一个灯标:控制左转方向灯的状态。

(2)方法成员:

    构造方式:填写数据成员值。

    启动方法:让等变绿一段时间后禁止。如果存在直线相反方向灯,则启动它。

    禁止方法:让等变红。如果存在直线相反方向灯,则禁止它;如果存在下一个灯,则启动它。

    状态判定:返回当前等的状态。

 

2、

(1)数据成员:

路的名称:做为路地唯一标识。

    车的集合:表示已存在于路上的车。

    指示灯:用于指示路上的车是否可以通行。

(2)方法成员:

    构造方式:构造12条不同向量中的一种通行道路;同时随机生成在路上车的数量;并发的检查与其相应的灯的状态,如果为绿,则放行一辆车。