黑马程序员 JAVA学习笔记——交通灯管理系统
来源:互联网 发布:淘宝在美国 编辑:程序博客网 时间:2024/04/30 10:33
android培训、java培训、期待与您交流!
前言:天生东南西北不分理论看起来有点吃力......
简单来说交通灯管理系统——分为交通灯的定义、交通灯的控制、路面这3各部分。根据视频的大意
交通灯的定义:利用枚举写出了轮廓 在4个需要判断红绿灯颜色的路指定对应相反的路和切换时的下一个路,交通灯的红绿变换。
控制:在令其一个类写了通过时间来控制切换灯的平率达到控制的目的。
路: 利用2个线程 一个不断产生车装入LIST集合中 实现有车驶入这条路的效果 另个判断路所对应的红绿灯是否是绿灯 是就不断删去LIST中的第一个元素 达到车看到绿灯驶过的效果。
通过主函数产生12条路的对象 即:简单来说交通灯管理系统——分为交通灯的定义、交通灯的控制、路面这3各部分。根据视频的大意
交通灯的定义:利用枚举写出了轮廓 在4个需要判断红绿灯颜色的路指定对应相反的路和切换时的下一个路,交通灯的红绿变换。
控制:在令其一个类写了通过时间来控制切换灯的平率达到控制的目的。
路: 利用2个线程 一个不断产生车装入LIST集合中 实现有车驶入这条路的效果 另个判断路所对应的红绿灯是否是绿灯 是就不断删去LIST中的第一个元素 达到车看到绿灯驶过的效果。
详细分析 交通灯:
public enum Lamp {
//以南到北为例(S2N):括号中 第一个字符串 表示对应的相反车道北到南(N2S) 第二个表示 当绿转红后的下一个变为路灯的道路名 第三个表示信号灯的初始化状态
S2N("N2S","S2W",false),S2W("N2E","E2W",false),E2W("W2E","E2S",false),E2S("W2N","S2N",false),
//由于上面涉及到了所以第二行的道路全以NULL空代替
S2N("N2S","S2W",false),S2W("N2E","E2W",false),E2W("W2E","E2S",false),E2S("W2N","S2N",false),
//由于上面涉及到了所以第二行的道路全以NULL空代替
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 LampController {
private Lamp currentLamp;
public LampController(){
//刚开始让由南向北的灯变绿;
currentLamp = Lamp.S2N;
currentLamp.light();
/*每隔10秒将当前绿灯变为红灯,并让下一个方向的灯变绿*/
ScheduledExecutorService timer = Executors.newScheduledThreadPool(1);//话说这毕老师的视频里没有啊 还是我漏下了
timer.scheduleAtFixedRate(//基本意思是定义个线程执行器 程序激活后等10秒执行 执行以后每10秒执行一次
new Runnable(){
public void run(){
System.out.println("来啊");
currentLamp = currentLamp.blackOut();
}
},
10,
10,
TimeUnit.SECONDS);
}
} 路:public class Road {
private List<String> vechicles = new ArrayList<String>();//定义集合 就把他看成路吧
private String name =null;
public Road(String name){//获取路名
this.name = name;
//模拟车辆不断随机上路的过程
ExecutorService pool = Executors.newSingleThreadExecutor();
pool.execute(new Runnable(){
//建立线程池
public void run(){
public void run(){
for(int i=1;i<1000;i++){
try {
Thread.sleep((new Random().nextInt(10) + 1) * 1000);//在1-10秒里产生一辆车
} catch (InterruptedException e) {
e.printStackTrace();
}
vechicles.add(Road.this.name + "_" + i);//装进集合(路)里
}
}
});
//每隔一秒检查对应的灯是否为绿,是则放行一辆车
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);
}
} 学习感悟:方向搞了老半天 搞清楚了方向 把十字路口看成 12条单行道就行了。
android培训、java培训、期待与您交流!
0 0
- 黑马程序员 JAVA学习笔记——交通灯管理系统
- 黑马程序员 java学习笔记——交通灯管理系统
- 黑马程序员学习笔记九——交通灯管理系统
- 黑马程序员——交通灯管理系统学习笔记
- 黑马程序员——交通灯管理系统学习笔记
- 黑马程序员_java学习笔记14—交通灯管理系统
- 【黑马程序员】 java笔记——交通灯管理系统
- 黑马程序员—java交通灯管理系统
- 黑马程序员——Java学习笔记之⑨——“交通灯管理系统”
- 黑马程序员-java学习笔记之交通灯管理系统
- 黑马程序员---交通灯管理系统 学习笔记
- 黑马程序员-交通灯管理系统学习笔记
- 《黑马程序员》交通灯管理系统--学习笔记
- 黑马程序员----交通灯管理系统学习笔记
- 黑马程序员——Java交通灯管理系统&银行业务系统
- 黑马程序员——自学笔记16(交通灯管理系统)
- 黑马程序员——交通灯管理系统笔记
- 黑马程序员——重复写交通灯管理系统笔记
- OCP 1Z0 051 30
- PAT 1012. 数字分类
- java读取二进制文件传给nodejs保存
- easyUI datagrid 表格 表头添加菜单,实现可选列。
- sun.misc.BASE64Encoder找不到jar包的解决方法
- 黑马程序员 JAVA学习笔记——交通灯管理系统
- 如何 恢复被覆盖的文件
- 2701-View-Expandable
- struts2+jqury ajax问题汇总与解决办法
- Ubuntu12.04安装基础教程(图文)
- 安卓开发之如何利用Intent对象,实现Activity和另一个Activity之间的跳转
- Oracle解锁,解决“ora00054:资源正忙”错误
- java变量和javascript变量之间的传递
- ios json数据解析