黑马程序员 JAVA <十> 红绿灯系统逻辑

本文介绍了如何使用JAVA实现十字路口的交通灯管理系统逻辑,包括异步生成车辆、信号灯控制、车辆通行模拟等。系统考虑了不同方向车辆的行驶规则,如直行、左右转车辆的控制,并通过定时器模拟车辆通过路口的时间。同时,文章给出了三个关键类:Road、Lamp和LampController的设计与实现,以及如何用枚举表示灯的状态和方向。

 

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

交通灯管理系统

模拟实现十字路口的交通灯管理系统逻辑,具体需求如下:

 1、异步随机生成按照各个路线行驶的车辆。

例如:

       由南向而来去往北向的车辆 ---- 直行车辆

       由西向而来去往南向的车辆 ---- 右转车辆

       由东向而来去往南向的车辆 ---- 左转车辆

       ……

【思考:车子由什么产生?产生的车子存储在什么里面?怎么产生车?】

2、信号灯忽略黄灯,只考虑红灯和绿灯。

3、应考虑左转车辆控制信号灯,右转车辆不受信号灯控制。

【思路:考虑右转的灯都为长绿灯,表示车随时可以右转】

4、具体信号灯控制逻辑与现实生活中普通交通灯控制逻辑相同,不考虑特殊情况下的控制逻辑。

注:南北向车辆与东西向车辆交替放行,同方向等待车辆应先放行直行车辆而后放行左转车辆。

5、每辆车通过路口时间为1秒(提示:可通过线程Sleep的方式模拟)。

【思考:车开过路口这个操作怎么实现?在哪里实现?】

6、随机生成车辆时间间隔以及红绿灯交换时间间隔自定,可以设置。

7、不要求实现GUI,只考虑系统逻辑实现,可通过Log方式展现程序运行结果。

思路:

一、先看车行路线图例:

 

 

二、逻辑中的12个方向的灯:

S2N(南到北),S2W(南到西),E2W(东到西),E2S(东到南) //主要的需要操作的四个灯,它控制通往四个方

向的车

N2S(北到南),N2E(北到东),W2E(西到东),W2N(西到北) //前面四个灯对应的反向灯,让它们依托于前面

四个灯来运作。

S2E(南到东),N2W(北到西),E2N(东到北),W2S(西到南)//四个右转灯,它们长亮

 

三、排除4个长亮灯,我们需要处理的灯有8个灯,不过,每一个灯都有反向的灯。比如S2N(南到北)和

N2S(北到南)。这样的话,就表示,S2N绿灯的话,那么N2S也是绿灯。这样的话,也就是说,剩下的8个

灯中,有四个灯可以依托于它的反向灯的运作来进行相同的运作。【即它的反向灯绿,那么它绿,它的

反向灯红,那么它红】

 

四、在这里车子可以用一个String来表示,根据不同的灯对应的路线,产生这条路线上的车。可以考虑

用12个线程来产生相对应的车。创建一个Road类,该类在构造函数中接受一个表示路线的String

roadName,比如:this. roadName  = roadName; 然后根据传入的路线,来创建这条路线上的车,并把

String表示的车存入这条路线上的ArrayList中。通过它的remove方法来移除这条路线上的车子。不过再

移除的时候,需要先判断当前路线上的灯是否为绿灯,绿灯才能移。车子移除出去,就表示车子开过路

口了。这个操作可以通过定时器完成。

 

五、灯控制器用于操作灯变化的时间,多长时间换下一个灯绿等等

 

六、一共需要创建三个类:灯(用枚举),路,灯控制器
模拟实现十字路口的交通灯管理系统逻辑,具体需求如下:


package com.iossoft.traffic;

import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;


/*

每个Road对象代表一条路线,总共有12条路线,即系统中总共要产生12个Road实例对象。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值