---------------------- ASP.Net+Android+IO开发S、.Net培训、期待与您交流! ----------------------p>
交通灯管理系统的需求:
异步随机生成按照各个路线行驶的车辆。
例如:
由南向而来去往北向的车辆 ---- 直行车辆
由西向而来去往南向的车辆 ---- 右转车辆
由东向而来去往南向的车辆 ---- 左转车辆
。。。
信号灯忽略黄灯,只考虑红灯和绿灯。
应考虑左转车辆控制信号灯,右转车辆不受信号灯控制。
具体信号灯控制逻辑与现实生活中普通交通灯控制逻辑相同,不考虑特殊情况下的控制逻辑。
注:南北向车辆与东西向车辆交替放行,同方向等待车辆应先放行直行车辆而后放行左转车辆。
每辆车通过路口时间为1秒(提示:可通过线程Sleep的方式模拟)。
模拟图
实现的部分代码:
public enum Lamp{//这是给12条行进路线定义灯,大写字母代表方向,2代表to
N2S(false,"S2N","N2E"),N2E(false,"S2W","W2E"),W2E(false,"E2W","W2N"),W2N(false,"E2S","N2S"),//由此行的路线灯来主导,第二行的灯跟着变化
S2N(false,null,null),S2W(false,null,null),E2W(false,null,null),E2S(false,null,null),
S2E(true,null,null),E2N(true,null,null),N2W(true,null,null),W2S(true,null,null);//此行的路线灯为右转灯
private boolean lighted;//定义一个布尔类型变量存储是否是绿灯
private String opposite;//定义对面的灯
private String next;//定义下一个灯
private Lamp(boolean ligthed,String opposite,String next){
this.opposite=opposite;
this.next=next;
}
public boolean lighted(){}//定义一个供外界调用的判断方法
public void light(){}//定义一个交通灯变绿的方法,同时操作两组灯
public void lightOff(){}//定义一个交通灯变红的方法,同时操作两组灯
public Lamp
}
由于路口的行进路线被确定为12条,只考虑通过路口,所以定义的road类要随机的给这条路线添加车辆并判断灯是否可以通行
public class Road(){
private List<String> vehicles=new ArrayList<String>();
private String name=null;//定义车辆的名字,用路线表示
public Road(String name){
this.name=name;
//这里张老师用到了一个executors类来定义线程,用这个线程来不停的产生车辆,并用sleep方法每隔随机的时间,用new Random().nextInt(10)+1返回一个1到10的随机数,
//另外定义一个计时器,在有车在绿灯的情况下,将集合中的vehicles移除对应的车辆。
}}}
在Road和Lamp定义好之后,要设计一个交通灯的控制器
public class LampController(){
private Lamp currentLamp;
LampController(){
currentLamp=Lamp.N2S;//将当前灯设置为北向南走向的,并点亮绿灯
currentLamp.light();
}
}
接着main方法:
public static void main(String[] args){
String[] strBunch={"N2S","N2E","W2E","W2N","S2N","S2W","E2W",“E2S","S2E","E2N","N2W","W2S";}
for(int x=0;x<strBunch.length;x++)
{
new Road(strBunch[i]);
}
new LampController();
---------------------- ASP.Net+Android+IOS开发、 .Net培训、期待与您交流! ----------------------详细请查看:http://edu.csdn.net