- 浏览: 12040 次
- 性别:
- 来自: 北京
文章分类
最新评论
------- android培训、java培训、期待与您交流! ----------
在这里有大家分享下张老师的交通灯设计思想
Read类
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实例对象。
* 每条路线上随机增加新的车辆,增加到一个集合中保存。
* 每条路线每隔一秒都会检查控制本路线的灯是否为绿,是则将本路线保存车的集合中的第一辆车移除,即表示车穿过了路口。
*/
public class Road {
//装车的路
private List<String> vechicles = new ArrayList<String>();
//路的名字
private String name =null;
//路的名字的构造函数
public Road(String name){
this.name = name;
//模拟车辆不断随机上路的过程 在构造函数中创建线程 Executors类是执行类用它来调用线程 SingleThreadExecutor()这个方法是执行一个线程
ExecutorService pool = Executors.newSingleThreadExecutor();
//要执行的线程
pool.execute(new Runnable(){
public void run(){
//9辆车
for(int i=1;i<10;i++){
try {
//间隔一到十秒出现一辆车
Thread.sleep((new Random().nextInt(10) + 1) * 1000);
//InterruptedException 中断异常
} catch (InterruptedException e) {
e.printStackTrace();
}
//将车装入路的集合中
vechicles.add(Road.this.name + "这条路线过了第" + i+"辆车");
}
}
});
//Executor执行已提交的 Runnable 任务的对象
//ScheduledExecutorService接口
//在ExecutorService的基础上,ScheduledExecutorService提供了按时间安排执行任务的功能,它提供的方法主要有:
//schedule(task,initDelay):安排所提交的Callable或Runnable任务在initDelay指定的时间后执行。
//scheduleAtFixedRate():安排所提交的Runnable任务按指定的间隔重复执行
//scheduleWithFixedDelay():安排所提交的Runnable任务在每次执行完后,等待delay所指定的时间后重复执行。
//每隔一秒检查对应的灯是否为绿,是则放行一辆车
//Executors.newScheduledThreadPool 执行安排好的线程
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) + " 过了这个十字路口了 !");
}
}
}
},
1,
1,
TimeUnit.SECONDS);
}
}
Lamp类
//每个Lamp元素代表一个方向上的灯,总共有12个方向,所有总共有12个Lamp元素。
public enum Lamp {
//东east西west南south北north
//每个枚举元素各表示一个方向的控制灯
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() + " 这个路线是绿灯,下面总共应该有6个方向能看到汽车穿过!快跑!!!!!");
}
//某个灯变红时,对应方向的灯也要变红,并且下一个方向的灯要变绿
//下一个要变绿的灯
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;
}
}
LampContorller类
java.util.concurrent.TimeUnit;
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(){
currentLamp = currentLamp.blackOut();
}
},
10,
10,
TimeUnit.SECONDS);
}
}
运行类
public class YunXing {
public static void main(String[] args) {
//产生12个方向的路线
String [] directions = new String[]{
"S2N","S2W","E2W","E2S","N2S","N2E","W2E","W2N","S2E","E2N","N2W","W2S"
};
for(int i=0;i<directions.length;i++){
new Road(directions[i]);
}
//产生整个交通灯系统
new LampController();
}
}
在这里有大家分享下张老师的交通灯设计思想
Read类
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实例对象。
* 每条路线上随机增加新的车辆,增加到一个集合中保存。
* 每条路线每隔一秒都会检查控制本路线的灯是否为绿,是则将本路线保存车的集合中的第一辆车移除,即表示车穿过了路口。
*/
public class Road {
//装车的路
private List<String> vechicles = new ArrayList<String>();
//路的名字
private String name =null;
//路的名字的构造函数
public Road(String name){
this.name = name;
//模拟车辆不断随机上路的过程 在构造函数中创建线程 Executors类是执行类用它来调用线程 SingleThreadExecutor()这个方法是执行一个线程
ExecutorService pool = Executors.newSingleThreadExecutor();
//要执行的线程
pool.execute(new Runnable(){
public void run(){
//9辆车
for(int i=1;i<10;i++){
try {
//间隔一到十秒出现一辆车
Thread.sleep((new Random().nextInt(10) + 1) * 1000);
//InterruptedException 中断异常
} catch (InterruptedException e) {
e.printStackTrace();
}
//将车装入路的集合中
vechicles.add(Road.this.name + "这条路线过了第" + i+"辆车");
}
}
});
//Executor执行已提交的 Runnable 任务的对象
//ScheduledExecutorService接口
//在ExecutorService的基础上,ScheduledExecutorService提供了按时间安排执行任务的功能,它提供的方法主要有:
//schedule(task,initDelay):安排所提交的Callable或Runnable任务在initDelay指定的时间后执行。
//scheduleAtFixedRate():安排所提交的Runnable任务按指定的间隔重复执行
//scheduleWithFixedDelay():安排所提交的Runnable任务在每次执行完后,等待delay所指定的时间后重复执行。
//每隔一秒检查对应的灯是否为绿,是则放行一辆车
//Executors.newScheduledThreadPool 执行安排好的线程
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) + " 过了这个十字路口了 !");
}
}
}
},
1,
1,
TimeUnit.SECONDS);
}
}
Lamp类
//每个Lamp元素代表一个方向上的灯,总共有12个方向,所有总共有12个Lamp元素。
public enum Lamp {
//东east西west南south北north
//每个枚举元素各表示一个方向的控制灯
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() + " 这个路线是绿灯,下面总共应该有6个方向能看到汽车穿过!快跑!!!!!");
}
//某个灯变红时,对应方向的灯也要变红,并且下一个方向的灯要变绿
//下一个要变绿的灯
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;
}
}
LampContorller类
java.util.concurrent.TimeUnit;
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(){
currentLamp = currentLamp.blackOut();
}
},
10,
10,
TimeUnit.SECONDS);
}
}
运行类
public class YunXing {
public static void main(String[] args) {
//产生12个方向的路线
String [] directions = new String[]{
"S2N","S2W","E2W","E2S","N2S","N2E","W2E","W2N","S2E","E2N","N2W","W2S"
};
for(int i=0;i<directions.length;i++){
new Road(directions[i]);
}
//产生整个交通灯系统
new LampController();
}
}
发表评论
-
黑马程序员_java1.5新特性与java学习中常用的英语单词
2014-07-17 11:21 1144------- android培训、java培 ... -
黑马程序员_反射枚举与正则表达式总结总结
2014-07-17 00:16 2366------- android培训、java培训、期待与您交流 ... -
黑马程序员_反射枚举与正则表达式总结
2014-07-16 11:34 0------- <a href="http:/ ... -
黑马程序员_类库与集合总结
2014-07-16 11:20 1114------- android培训、java培 ... -
黑马程序员_IO流与多线程总结
2014-07-16 00:03 2018------- android培训、java培 ... -
黑马程序员_IO与多线程总结
2014-07-15 15:07 0------- <a href="http:/ ... -
黑马程序员_面向对象总结
2014-07-15 11:32 840------- android培训、java培 ... -
黑马程序员_张老师银行面试题Bank
2014-07-15 02:43 1250------- android培训、java培训、期待与您交流 ... -
黑马程序员_面向对象之前的Java基础总结
2014-07-15 00:49 616------- <a href="http ... -
黑马程序员_分类代理理解与AOP面向方面编程总结
2014-07-11 13:30 804------- android培训、java培训、期待与您 ... -
黑马程序员_JavaBean类总结
2014-07-09 21:59 1203------- android培训、java培训、期待与您 ... -
黑马程序员_JavaBean类总结
2014-07-09 21:46 0------- <a href="http ...
相关推荐
基于Verilog_HDL的交通灯控制器设计.pdf基于Verilog_HDL的交通灯控制器设计.pdf基于Verilog_HDL的交通灯控制器设计.pdf基于Verilog_HDL的交通灯控制器设计.pdf基于Verilog_HDL的交通灯控制器设计.pdf基于Verilog_HDL...
基于Verilog_HDL的交通灯控制器设计报告.docx基于Verilog_HDL的交通灯控制器设计报告.docx基于Verilog_HDL的交通灯控制器设计报告.docx基于Verilog_HDL的交通灯控制器设计报告.docx基于Verilog_HDL的交通灯控制器...
基于Verilog_HDL的交通灯控制器设计报告.pdf基于Verilog_HDL的交通灯控制器设计报告.pdf基于Verilog_HDL的交通灯控制器设计报告.pdf基于Verilog_HDL的交通灯控制器设计报告.pdf基于Verilog_HDL的交通灯控制器设计...
基于stc15单片机的交通灯 跟现实一样的交通灯系统
如图8-1,L7、L6、L5作为南北路口的交通灯与PC7、PC6、PC5相连,L2、L1、L0作为东西路口的交通灯与PC2、PC1、PC0相连。编程使六个灯按交通灯变化规律亮灭。 三、编程提示: 十字路口交通灯的变化规律要求: (1) ...
模拟十字路口交通灯的红绿黄灯的闪烁 实现交通灯功能的汇编程序.
01-7K月薪面试题破解之一_交通灯管理系统视频教程01-7K月薪面试题破解之一_交通灯管理系统视频教程01-7K月薪面试题破解之一_交通灯管理系统视频教程01-7K月薪面试题破解之一_交通灯管理系统视频教程01-7K月薪面试题...
用vivado软件编写的交通灯代码,模拟交通路口多个交通指示灯联合作用
利用51单片机使用汇编语言进行编程,实现一个简单的交通灯功能程序。
数电课程设计,交通灯,基于Quartus II编写
单片机应用__交通灯程序报告,用汇编语言编写,注意程序在word中的逗号可能要改一下,才能在wave6000中用
Verilog_HDL的交通灯控制器设计.pdfVerilog_HDL的交通灯控制器设计.pdfVerilog_HDL的交通灯控制器设计.pdfVerilog_HDL的交通灯控制器设计.pdfVerilog_HDL的交通灯控制器设计.pdfVerilog_HDL的交通灯控制器设计....
Verilog_HDL的交通灯控制器设计.docxVerilog_HDL的交通灯控制器设计.docxVerilog_HDL的交通灯控制器设计.docxVerilog_HDL的交通灯控制器设计.docxVerilog_HDL的交通灯控制器设计.docxVerilog_HDL的交通灯控制器设计....
红绿灯,紧急按键,能了解嵌入式多任务的概念,更好的控制交通灯信号
51单片机交通灯控制程序51单片机交通灯控制程序51单片机交通灯控制程序
基于西门子S7-1200交通灯,交通灯控制
智能交通灯 三灯变换 并显示出来 51单片机看法
利用STM32编写的交通灯的程序,涉及GPIO,RCC,NVIC,TIM等的操作
1.设计一个十字路口的交通灯控制电路,要求甲车道和乙车道两条交叉道路上的车辆交替运行,每次通行时间都设为25秒; 2.要求黄灯先亮5秒,才能变换运行车道; 3.根据交通灯控制系统框图,画出完整的电路图。 3....
课程设计《交通灯控制的设计》,不知道会不会太简单了。