------- Windows Phone 7手机开发、.Net培训、期待与您交流! -------
1. 枚举类的特点;
枚举类不能在外面单独创建对象;
2. 对于系统中灯的设计,使用了枚举类;
设计情况;
每个枚举元素各表示一个方向的控制灯,每一个枚举类都是一个实例对象;
注明;4个灯依次亮;
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);
创建一个构造函数,必须是私有的;参数的意义;opposite对应的灯;next下一个灯;lighted是否是绿色的;
private Lamp(String opposite,String next,boolean lighted){
this.opposite = opposite;
this.next = next;
this.lighted = lighted;
}
3. 枚举类里面实现了两个方法;
其中Lamp.valueOf(opposite).light();返回的是一个Lamp灯的对象;就是一个枚举类的对象;下面是这两个方法的具体实现;
某个灯变绿时,它对应方向的灯也要变绿,灯变绿的方法;
public void light(){
this.lighted = true;
if(opposite != null){
将字符串变成对象;Lamp.valueOf(opposite)返回的是灯的对象;
Lamp.valueOf(opposite).light();
}
System.out.println(name() + " lamp is green,下面总共应该有6个方向能看到汽车穿过!");
System.out.println(name() + " lamp is green,四个不受控制的一直是亮的,两个受控制的;");
}
灯变红时,对应方向的灯也要变红,并且下一个方向的灯要变绿
@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;
}
4. 对于灯的变化时间,我们是通过线程实现的;代码如下;
/*每隔10秒将当前绿灯变为红灯,并让下一个方向的灯变绿
*参数nThreads代表 -池中的线程数
ScheduledExecutorService timer = Executors.newScheduledThreadPool(1);
scheduleAtFixedRate(Runnable command, long initialDelay, long period, TimeUnit unit)
command - 要执行的任务
initialDelay - 首次执行的延迟时间
period - 连续执行之间的周期
unit - initialDelay 和 period 参数的时间单位
timer.scheduleAtFixedRate(
new Runnable(){
public void run(){
System.out.println("来啊");
// 返回下一个变亮的灯;
currentLamp = currentLamp.blackOut();
}
},
10,
10,
TimeUnit.SECONDS);
}
5. 在路上不断的添加车辆;
//模拟车辆不断随机上路的过程
Executors这个是一个java线程并发库工具类。里面有大量的静态方法;是一个执行器类;
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);
}
}
});
6. 再用一个定时线程判断我们这个灯是不是亮着的;
//每隔一秒检查对应的灯是否为绿,是则放行一辆车
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) + " is traversing !");
}
}
}
},
1,
1,
TimeUnit.SECONDS);
7. 对于交通灯管理系统的总结;
1、用到了枚举类;
2、用到了定时线程和不定时线程
3、用到了集合;
4、Executors这个是一个java线程并发库工具类。里面有大量的静态方法;是一个执行器类;
相关推荐
黑马程序员入学面试题,复习必备,事半功倍。
Asp.net中级程序员_面试题,绝对经典,ASP.NET,数据库,Webservice,设计模式,几乎涵盖了所有的相关知识,设置这个分绝对有其价值!
Aspnet中级程序员_面试题 京华志&精华志出品 分享资源 C# ASP.NET SQL DBA 源码
JAVA程序员面试的常用面试题讲解视频,非常到位
交通灯管理系统视频教程01-7K月薪面试题破解之一_交通灯管理系统视频教程01-7K月薪面试题破解之一_交通灯管理系统视频教程01-7K月薪面试题破解之一_交通灯管理系统视频教程01-7K月薪面试题破解之一_交通灯管理系统...
java程序员,面试必须知识,常见面试题
程序员面试题精选程序员面试题精选程序员面试题程序员面试题精选精选
Android面试宝典包含两个宝典: 1【黑马项目宝典】虐面试官神器之必备黑马程序员项目宝典V1.1 内容包括:(1)电子商城(2)ListView系列(3)图像处理(4)动画效果(5)控件大全(6)新闻资讯(7)生活相关(8)...
java程序员早期面试题汇总 BAT经典面试题汇总.pdf Java常考面试题.pdf java面试题(题库全).doc java面试题-外企软件工程师面试题大全.rar 程序员面试题精选100题.pdf ... --------------------------------...
C#_面试题_总结_2,希望对大家有所帮助。
程序员面试试题程序员面试试题程序员面试试题程序员面试试题程序员面试试题程序员面试试题
资源名称:JAVA Android面试题讲解视频资源目录:【】2012黑马程序员01_面试题【】2012黑马程序员02_面试题【】2012黑马程序员03_面试题【】2012黑马程序员04_面试题【】225ce844c6c817e9614d8f17ea70a640【】...
张孝祥交通灯管理系统笔记 面试题视频教程笔记
中级程序员必备面试题.txt
初出茅庐的程序员面试必看!!!!漂亮的面试回答
程序员 必备 面试题 Accp 5.0 S2 程序员 必备 面试题 Accp 5.0 S2
程序员面试题程序员面试题程序员面试题程序员面试题程序员面试题
收集了很多师兄师姐出去就业后,收集回来的企业面试.net程序员的面试题啊!不容易啊!1-8份面试题,好好看啊!都是技术题,祝面试上自己喜欢的职业
java程序员面试常见面试题,从java的语法规范到数据结构
华为面试题精选华为面试题华为面试题精选精选华为面试题精选