模拟交通灯管理系统
来源:互联网 发布:极客学院 tensorflow 编辑:程序博客网 时间:2024/05/20 15:11
简要分析下,一个简单的十字路口,暂不考虑黄灯,默认右转弯的绿灯一直处于亮着状态
可以建立
一个交通灯的对象:有十二个交通灯、负责灯亮的方法、负责灯变暗的方法
一个路的对象:创建车辆、绿灯时放行车辆
一个交通灯控制器:每隔10秒切换灯
一个负责系统运行的main
代码:
public enum 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);
private Lamp(String opposite,String next,boolean lighted){
this.opposite = opposite;
this.next = next;
this.lighted = lighted;
}
/*当前灯是否为绿*/
private boolean lighted;
/*与当前灯同时为绿的对应方向*/
private String opposite;
/*当前灯变红时下一个变绿的灯*/
private String next;
public boolean isLighted(){
return lighted;
}
/**
* 某个灯变绿时,它对应方向的灯也要变绿
*/
public void light(){
this.lighted = true;
if(opposite != null){
Lamp.valueOf(opposite).light();
}
System.out.println(name() + " lamp is green,下面总共应该有6个方向能看到汽车穿过!");
}
/**
* 某个灯变红时,对应方向的灯也要变红,并且下一个方向的灯要变绿
* @return 下一个要变绿的灯
*/
public Lamp blackOut(){
this.lighted = false;
if(opposite != null){
Lamp.valueOf(opposite).blackOut();
}
Lamp nextLamp= null;
if(next != null){
nextLamp = Lamp.valueOf(next);
System.out.println("绿灯从" + name() + "-------->切换为" + next);
nextLamp.light();
}
return nextLamp;
}
}
---------------------------------路--------------------------------
public class Road {
private List<String> vechicles = new ArrayList<String>();
private String name =null;
/***
* 将一条路作为一个单元处理,创建多辆车在路上,启动两个线程
* 线程一:创建模拟车
* 线程二:每隔一秒检查车辆能否放行
* @param name 路的名称,按照方向来辨别
*/
public Road(String name){
this.name = name;
//模拟车辆不断随机上路的过程
ExecutorService pool = Executors.newSingleThreadExecutor();
pool.execute(new Runnable(){
public void run(){
for(int i=1;i<1000;i++){
try {
Thread.sleep((new Random().nextInt(10) + 1) * 1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
vechicles.add(Road.this.name + "_" + i);
System.out.println("新增车--");
}
}
});
//每隔一秒检查对应的灯是否为绿,是则放行一辆车
ScheduledExecutorService timer = Executors.newScheduledThreadPool(1);
timer.scheduleAtFixedRate(
new Runnable(){
public void run(){
if(vechicles.size()>0){
boolean lighted = Lamp.valueOf(Road.this.name).isLighted();
if(lighted){
System.out.println("当前绿灯车辆通行中: " + vechicles.remove(0) + " is traversing !");
}
}
}
},
1,
1,
TimeUnit.SECONDS);
}
}
-----------------------------交通灯控制--------------------------------
public class LampController {
private Lamp currentLamp;//定义当前灯
public LampController(){
//刚开始让由南向北的灯变绿;
currentLamp = Lamp.S2N;
currentLamp.light();
/*每隔10秒将当前绿灯变为红灯,并让下一个方向的灯变绿*/
ScheduledExecutorService timer = Executors.newScheduledThreadPool(1);
timer.scheduleAtFixedRate(
new Runnable(){
public void run(){
System.out.println("每隔10秒切换下灯的状态......");
currentLamp = currentLamp.blackOut();
}
},
10,
10,
TimeUnit.SECONDS);
}
}
---------------------------负责系统运行的main-------------------------------------------
public class MainClass {
public static void main(String[] args) {
// 产生12个方向的路线
String [] directions = new String[]{
"S2N","S2W","E2W","E2S","N2S","N2E","W2E","W2N","S2E","E2N","N2W","W2S"
};
// 模拟12条路
for(int i=0;i<directions.length;i++){
new Road(directions[i]);
}
// 产生整个交通灯系统
new LampController();
}
}
- 模拟交通灯管理系统
- 模拟交通灯管理系统
- 模拟交通灯管理系统
- 模拟交通灯管理系统
- 多线程模拟交通灯管理系统
- 模拟交通灯管理系统(掌握面向对象的经典方法)
- java 面试题(一) [模拟交通灯管理系统]
- 黑马程序员───模拟交通灯管理系统
- 黑马程序员_java_基础加强_模拟交通灯管理系统
- 交通灯模拟系统
- 交通灯管理系统
- 交通灯管理系统
- 交通灯管理系统笔记
- 交通灯管理系统
- 交通灯管理系统
- 交通灯管理系统
- 交通灯管理系统
- 交通灯管理系统
- 《代码大全》学习笔记(3):软件创建的先决条件
- 11210 - Chinese Mahjong
- Matlab与Visual Studio的联合编程
- 关于CSDN, cnblog, iteye和51cto四个博客网站的比较与分析
- quorum failgroup disk (2)
- 模拟交通灯管理系统
- 读入未知数目的string对象
- void
- 1018. Public Bike Management
- JDBC 批量更新数据到数据库
- quorum failgroup disk (3)
- Codeforces46D(Parking Lot)线段树区间查询
- C++申请动态二维数组
- Oracle 10g RAC 修改VIP