黑马程序员-交通灯管理系统
2013-03-18 11:50
441 查看
---------- android培训 java培训 期待与您交流!------------
学习了张孝祥老师的银行业务调度系统视频教程后,对于面向对象思想有了一个很直观的感受。
对于这道面试题,如果在还没看过这个教程之前,绝对能把我弄的糊里糊涂,但是张老师做这道题的思想确实很好。
题:模拟出十字路口红绿灯控制车辆的运行。
面对这道题首先应该认清楚总共有几条路线,每个方向都有开往其他路线的车,经过分析出来总共12条路线。
![](http://img.my.csdn.net/uploads/201303/18/1363578187_1108.png)
再总结出每一个方向都有向右行驶的路线,而向右行驶,并不会对其他路线造成影响,所以对于向右行驶的路线可以一直认为是绿灯,下面将不予考虑。
再思考:
比如 南向开往北向时,那么北向也是开往南向的,南向开往西向时,北向也会开往东向,两条路线是相对的,那样就可以将来去的两条路线看作是一对,只要控制好其中一条,另一条也会做出相同的动作。
![](http://img.my.csdn.net/uploads/201303/18/1363578366_7788.png)
根据上一步的理论,可以总结出:
那么控制了南向的向北和向西的两条路线,然后使北向的灯也跟随南向的灯转换,那么等于说就完成了南北两向的路线了(向右车辆不考虑)
既然南北可以这样做,东西向也就可以。张老师是控制了南向两个灯,和东向两个灯,其他灯跟随相对的灯转换,就完出了思路。
在接下来的教程中,张老师运用了面向对象的思路,问到:到了现在,你们想这个程序中应该有几个类?
最后总结出 需要 :路 灯 控制器
车被当作了路的一部分,路管理车的运行。
以下是我看过教程后,自己做了一遍
1:首先创建路 :
2.创建灯
3.创建灯的控制器
4.最后调用
---------- android培训 java培训
期待与您交流!------------
详情请点击:http://edu.csdn.net/
4000
学习了张孝祥老师的银行业务调度系统视频教程后,对于面向对象思想有了一个很直观的感受。
对于这道面试题,如果在还没看过这个教程之前,绝对能把我弄的糊里糊涂,但是张老师做这道题的思想确实很好。
题:模拟出十字路口红绿灯控制车辆的运行。
面对这道题首先应该认清楚总共有几条路线,每个方向都有开往其他路线的车,经过分析出来总共12条路线。
![](http://img.my.csdn.net/uploads/201303/18/1363578187_1108.png)
再总结出每一个方向都有向右行驶的路线,而向右行驶,并不会对其他路线造成影响,所以对于向右行驶的路线可以一直认为是绿灯,下面将不予考虑。
再思考:
比如 南向开往北向时,那么北向也是开往南向的,南向开往西向时,北向也会开往东向,两条路线是相对的,那样就可以将来去的两条路线看作是一对,只要控制好其中一条,另一条也会做出相同的动作。
![](http://img.my.csdn.net/uploads/201303/18/1363578366_7788.png)
根据上一步的理论,可以总结出:
那么控制了南向的向北和向西的两条路线,然后使北向的灯也跟随南向的灯转换,那么等于说就完成了南北两向的路线了(向右车辆不考虑)
既然南北可以这样做,东西向也就可以。张老师是控制了南向两个灯,和东向两个灯,其他灯跟随相对的灯转换,就完出了思路。
在接下来的教程中,张老师运用了面向对象的思路,问到:到了现在,你们想这个程序中应该有几个类?
最后总结出 需要 :路 灯 控制器
车被当作了路的一部分,路管理车的运行。
以下是我看过教程后,自己做了一遍
1:首先创建路 :
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; public class road { private List<String> car = new ArrayList<String>(); private String name; public road(String name) { this.name = name; //模拟车辆不断上路的过程 //一个执行者,可以创建一个线程池,由线程池来调用线程执行命令 ExecutorService pool = Executors.newSingleThreadExecutor(); //将一个任务交给线程池执行 pool.execute(new Runnable() { @Override public void run() { // TODO Auto-generated method stub for (int i = 0; i<1000; i++) { try { //让线程停止1~10秒时间来不定时断续执行 Thread.sleep((new Random().nextInt(10)+1)*1000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } car.add(road.this.name+" "+i); } } }); //模拟车辆不断下路的过程 ScheduledExecutorService timer = Executors.newScheduledThreadPool(1); timer.scheduleAtFixedRate( new Runnable() { @Override public void run() { // TODO Auto-generated method stub if (car.size() > 0) { boolean b = lamp.valueOf(road.this.name).islu(); if(b) System.out.println(car.remove(0)+" 开走了"); } } }, 1, 1, TimeUnit.SECONDS); }
}
2.创建灯
/* * s2n,s2w,e2s,e2w, n2s,n2e,w2n,w2e, s2e,e2n,n2w,w2s;
* */ public enum lamp { s2n("n2s","s2w",false),s2w("n2e","e2s",false),e2s("w2n","e2w",false),e2w("w2e","s2n",false), n2s(null,null,false),n2e(null,null,false),w2n(null,null,false),w2e(null,null,false), s2e(null,null,true),e2n(null,null,true),n2w(null,null,true),w2s(null,null,true); private boolean bl; private String nextLamp; private String opposite; private lamp(String opposite,String nextLamp,boolean bl) { this.opposite = opposite; this.nextLamp = nextLamp; this.bl = bl; } public boolean islu() { return bl; } public void lu() { this.bl = true; if(opposite != null) lamp.valueOf(opposite).lu(); System.out.println(name()+"。。。变绿了。。。"); } public String hong() { this.bl = false; if (opposite != null) lamp.valueOf(opposite).hong(); if(nextLamp != null) { lamp.valueOf(nextLamp).lu(); System.out.println("绿灯从"+name()+"切换为"+nextLamp); } return nextLamp; } }
3.创建灯的控制器
import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; public class controller { private lamp l = lamp.s2n; public controller() { //刚开始让由南向北的灯变绿 l.lu(); //每隔10秒钟在四条路线中切换 ScheduledExecutorService se = Executors.newScheduledThreadPool(1); se.scheduleAtFixedRate( new Runnable() { @Override public void run() { // TODO Auto-generated method stub l = lamp.valueOf(l.hong()) ; } }, 10, 10, TimeUnit.SECONDS ); } }
4.最后调用
public class MainClass { public static void main(String[] args) { String[] s = new String[]{"s2n","s2w","e2s","e2w", "n2s","n2e","w2n","w2e", "s2e","e2n","n2w","w2s"}; for (int i = 0;i<s.length;i++) { new road(s[i]); } new controller(); } }
---------- android培训 java培训
期待与您交流!------------
详情请点击:http://edu.csdn.net/
4000
相关文章推荐
- 黑马程序员_7K月薪面试题破解之一_交通灯管理系统
- 黑马程序员-交通灯管理系统
- 黑马程序员 交通灯管理系统
- 黑马程序员Java -- 交通灯管理系统案总结
- 黑马程序员 交通灯管理系统的分析与理解
- 黑马程序员_交通灯管理系统
- 【黑马程序员】交通灯管理系统
- 黑马程序员--交通灯管理系统
- 黑马程序员_交通灯管理系统笔记
- 黑马程序员----交通灯管理系统
- 黑马程序员23.交通灯管理系统
- 黑马程序员_7k面试_交通灯管理系统
- 黑马程序员---交通灯管理系统
- 黑马程序员_java_基础加强_模拟交通灯管理系统
- 【黑马程序员】交通灯管理系统_学习笔记
- 【黑马程序员】交通灯管理系统
- 黑马程序员——交通灯管理系统
- 黑马程序员—(JAVA)交通灯管理系统
- 黑马程序员-Java基础学习之交通灯管理系统
- 黑马程序员——交通灯管理系统