黑马程序员--交通灯
来源:互联网 发布:回溯算法 八皇后问题 编辑:程序博客网 时间:2024/06/07 21:42
---------------------- <a href="http://edu.csdn.net"target="blank">ASP.Net+Android+IO开发S</a>、<a href="http://edu.csdn.net"target="blank">.Net培训</a>、期待与您交流! ----------------------
项目总结:每天我们在马路上,经常会遇到交通灯。但是我们只是去遵守它的规则,很少去了解他的工作原理,其实在做这个项目之前我真的不知道交通灯这个项目可以分出12条路线来,如果是我分析可能就会分析出8条线,而把向右转常绿的这几条线给忽略。通过这次项目我学会了,做项目一定要把项目分析透彻做到精益求精。否则会忽略很多重点的东西,最后一定会失败的!还有就是我们在为客户些项目的时候,一定要站在客户的角度去考虑问题,要全面。如果交通灯是我做,而我没有分析出有12条路线,呵呵,也许项目完成之后,一定会出现交通事故的。呵呵。。所以这也是我自己以后再工作或者学习当中要注意地,做什么事都要细心。
Native2Ascii和DOM4j,其中的“2”表示“to”的简写,“4”表示“for”的简写,这时程序员圈子里流行的一种对“to”和“for”进行间歇的习惯!
面向对象设计把握一个重要的经验:谁拥有数据,谁就对外提供操作这些数据的方法。在牢牢掌握几个典型的案例就可以了:人在黑板上画圈,列车司机紧急刹车,售货员统计售货 小票金额,你把门关上了等。
面试题:两块石头变成一把石刀,用石刀去砍树,用木头去做成椅子?
Stone 石头
StoneKnife 石刀
tree 树
mateial 木材
Chair 椅子
//石刀加工厂,里面有个方法,把石头做成石刀,又说是两块石头,所以传进参数应该是两个石头
StoneKnife=KnifeFactory.createKnife(Stone first,Stone second);
//木材加工,把树变成木材的方法,传进参数为树
mateial=stoneKnife.cut(tree);
//椅子 椅子加工厂,有个做椅子的方法,那么方法传进参数为木材
Chair=ChairFactory.makeChair(material);
枚举的构造方法必须是私有的private类型
Road类的编写(路线)
每个Road对象都有一个name成员变量来代表方向,有一个vehicles成员变量来代表方向上的车辆集合。
在Road对象的构造方法中启动一个县城每隔一个一个随机的时间向vehicles集合众增加一辆车(用一个“路线名_id”形式的字符串进行表示).
//路上面车的集合
List<String> vehicles=new ArrayList<String>();
private String name;
public Road(String name) {
this.name = name;
//创建一个线程池,并指定线程池中用1个线程
ExecutorService pool=Executors.newScheduledThreadPool(1);
pool.execute(new Runnable(){
public void run(){
//循环往这条路上面加车辆。。。。1000只是为了模拟数据
for (int i = 1; i < 1000; i++) {
try {
Thread.sleep((new Random().nextInt(10))+1);
} catch (InterruptedException e) {
e.printStackTrace();
}
//这里用到的时这条路的名字加上数组里面的第几辆车
vehicles.add(Road.this.name+"_"+i);
}
}
});
//绿灯。。减少车辆的方法
ScheduledExecutorService timer= Executors.newScheduledThreadPool(1);
timer.scheduleAtFixedRate(
new Runnable(){
public void run(){
if (vehicles.size()>0) {
boolean lighted=Lamp.valueOf(Road.this.name).isLighted();
if (lighted) {
System.out.println(vehicles.remove(0)+"is turn");;
}
}
}
},
1,
1,
TimeUnit.SECONDS
);
}
然后写灯的类Lanp。
public enum Lamp {
//N2S,N2E,W2E,W2N,S2N,S2W,E2W,E2S,S2E,E2N,N2W,W2S;
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 Green(){
this.lighted=true;
if (opposite!=null) {
Lamp.valueOf(opposite).Green();
}
System.out.println(name()+"Lamp is green");
}
//红灯
public Lamp Red(){
this.lighted=false;
if (opposite!=null) {
Lamp.valueOf(opposite).Red();
}
Lamp nextLamp=null;
if (next!=null) {
nextLamp=Lamp.valueOf(next);
nextLamp.Green();
System.out.println("灯从"+name()+"-->"+next);
}
return nextLamp;
}
}
灯的控制器
//这是一个当前灯的对象
private Lamp currentLamp;
public LampController() {
//假设当前等的对象为 S2N
currentLamp=Lamp.S2N;
//并且让这个灯为绿色
currentLamp.Green();
//定时器
ScheduledExecutorService timer= Executors.newScheduledThreadPool(1);
//两秒后开始调用该方法,并且每2秒循环一次。
timer.scheduleAtFixedRate(
new Runnable(){
public void run(){
currentLamp=currentLamp.Red();
}
},
2,
2,
TimeUnit.SECONDS
);
}
---------------------- <a href="http://edu.csdn.net"target="blank">ASP.Net+Android+IO开发S</a>、<a href="http://edu.csdn.net"target="blank">.Net培训</a>、期待与您交流! ----------------------
- 黑马程序员 交通灯系统
- 黑马程序员之交通灯
- 黑马程序员:交通灯案例
- 黑马程序员:交通灯案例
- 黑马程序员-交通灯系统
- 黑马程序员--交通灯
- 黑马程序员-交通灯
- 黑马程序员-交通灯系统
- 黑马程序员 交通灯
- 黑马程序员~模拟交通灯
- 黑马程序员----交通灯总结
- 黑马程序员->交通灯系统
- 黑马程序员 交通灯系统
- 黑马程序员---交通灯
- 黑马程序员----JAVA----交通灯
- 黑马程序员: 交通灯管理
- 黑马程序员-交通灯
- 黑马程序员_交通灯
- java_web学习第六天(Fileter过滤器)
- Eclipse快捷键大全
- sqlserver客户端 win7安装问题
- Google Chrome中的高性能网络(一)
- GNU Dynamic Loader search directories
- 黑马程序员--交通灯
- C# 实现json解析
- 也说说Cocos2d-x的锚点
- C指针——函数指针
- mvc原理和mvc模式的优缺点
- Google Chrome中的高性能网络(二)
- popupwindow不响应back键
- Java开发中的23种设计模式详解
- C# string insert