---------------------- android培训、java培训、期待与您交流! ----------------------
黑马程序员-交通灯管理系统
交通灯管理系统
需求:
1异步随机生成按照各种路线行驶的车辆。
如:E2S.N2E等
2信号忽略黄灯。只考虑红绿灯。
3.应考虑左转车辆控制信号灯,右转车辆不收信号灯控制。
4具体信号灯逻辑与实现生活中普通交通控制,不考虑特殊情况。
5每辆车通过路口的时间为1秒。
6随机生成车辆时间间隔,以及红绿灯时间间隔自定,可以设置。
7不许实现GUI,只考虑逻辑实现。
思想:
我们初步设想一下有哪些对象:红绿灯,,红绿灯的控制系统,汽车,路线,汽车看到自己所在路线的绿灯亮了就穿越路口吗,不是,还需要看前面是否有车,看前面是否有车该问那个对象,,该问路,路中存储车辆的集合,显然路上应该有增加车辆和减少车辆的方法,根据题目,我们这里并不是体现车辆移动的过程,只是捕捉车辆穿越路口的过程,也就是捕捉路上车辆减少的过程,所以,这个车并不需要单独设计为一个对象,用一个字符串表示就可以
面向对象设计把握一个重要的经验,谁拥有数据,谁就对外提供操作这些数据的方法,在牢牢掌握几个典型的案例就可以了,例如:人在黑板上面画圆,汽车死机刹车等。售货员统计收获小票金额,你把门关上。
两块石头磨成一把石刀,石刀可以砍树,堪称木材,木材做成椅子。
球从一根绳子的一端移动到另一端。
每条路线上都会出现多辆车,路线上要随机增加新的车,在绿灯期间还要美妙煎熟一辆车。
设计一个Road来表示路,每个Road对象来表示一条路线共12条路线,及系统中总共产生12个Road的示例对象。
每条路线中随机增减新的 车辆,增加到一个集合中保存。
每条路线买个一秒都会检查控制本路线的灯是否为绿。是则兼本条路线保存车的集合总共的第一个车辆移除,记表示穿越了路口。
定义一个类表示路
package com.isoftstone.interview.traffic; 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 { List<String> vechicles=new ArrayList<String>(); private String name=null; //在路上不断的产生汽车 public Road(String name){ this.name=name; //创建一个线程池,从线程池中选一条线程启动 ExecutorService pool=Executors.newSingleThreadExecutor(); //启动一条线程。execute的参数是一个Runnable接口 pool.execute(new Runnable(){ //实现Runnable接口i,并覆盖run方法 public void run(){ //自动生成1000辆车 for(int i=1;i<1000;i++){ try {//生成时间的间隔是随机的,使用Random类的nextInt方法,生成1-10的随机数,乘以1000,得到1-10s的随机时间 Thread.sleep((new Random().nextInt(10)+1)*1000); } catch (Exception e) { e.printStackTrace(); }//把生成的汽车添加到路上。 vechicles.add(Road.this.name+"—"+i); } } }); //定义一个定时器,调度的意思,调度池大小1 ScheduledExecutorService timer=Executors.newScheduledThreadPool(1); //定时器,根据固定频率进行做事 timer.scheduleAtFixedRate(new Runnable(){ public void run(){ //检查路上有没有车, if(vechicles.size()>0){ //定义一个变量代表灯,内部类用到外部类中的名字,用外部类名.this.name boolean lighted=Lamp.valueOf(Road.this.name).isLighted();//得到这个灯 if(lighted){//如果前面的灯是亮点,那么就移除第一辆车。remove方法将返回取走的车 System.out.println(vechicles.remove(0)+" is traversing!"); } } } }, 1,//过多少秒做这件事 1,//做完以后再过多少时间再做一次 TimeUnit.SECONDS);//设置前面参数的度量单位。 //定时器,参数Runnable对象 /*timer.schedule(new Runnable(){ }, delay, //过多长时间以后做一件事 unit);*/ } }
定义每一条路上面对应的灯
package com.isoftstone.interview.traffic; public enum Lamp { 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 Lamp(){}//添加一个不带参数的构造方法 private boolean lighted;//定义一个变量,用于记住灯的状态 private String next;//下一个灯 private String opposite;//对面的灯 //判断灯当前的状态 public boolean isLighted(){ return lighted; }//灯变亮的方法 public void light(){ this.lighted=true; if(opposite!=null){//如果有对应的灯,就让对应的灯亮,以免进入死循环 Lamp.valueOf(opposite).light();//枚举的valueof方法,给他名字返回枚举对象,通过对象调用light(); } System.out.println(name()+"lamp is green,下面总共应该有6个方向能看到汽车穿过!"); } //灯变黑的方法 public Lamp blackOut(){ this.lighted=false; if(opposite!=null){//如果有对应的灯,就让对应的灯亮,以免进入死循环 Lamp.valueOf(opposite).blackOut();//枚举的valueof方法,给他名字返回枚举对象,通过对象调用light(); } Lamp nextLamp=null; if(next!=null){//灯灭以后如果有下一个灯,就让下一个灯变亮 nextLamp=Lamp.valueOf(next); System.out.println("绿灯从"+name()+"------->转换为"+next); nextLamp.light(); } return nextLamp;//返回新变绿的灯 } }
定义一个灯的控制器
package com.isoftstone.interview.traffic; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; public class LampController { private Lamp currentLamp; public LampController(){ currentLamp=Lamp.S2N;//先制定一个灯,当前的灯绿 currentLamp.light();//让对面的灯也亮 //需要每过一段时间改变一个灯亮,使用定时器。 ScheduledExecutorService timer=Executors.newScheduledThreadPool(1); //使用定时器的scheduleAtFixedRate方法。 timer.scheduleAtFixedRate(new Runnable(){ public void run(){//把当前灯改为新变绿的灯。 currentLamp=currentLamp.blackOut(); } }, 10, 10, TimeUnit.SECONDS); } }
写一个主类,创建路的对象,和开启灯的控制器
package com.isoftstone.interview.traffic; public class MainClass { /** * @param args */ public static void main(String[] args) { String[] directions=new String[]{ "S2N","S2W","E2W","E2S","N2S","N2E","W2E","W2N","S2E","E2N","N2W","W2S" }; //定义12条路,定义为不同的名字 for(int i=0;i<directions.length;i++){ new Road(directions[i]); } new LampController();//打开灯的控制器 } }
---------------------- android培训、java培训、期待与您交流! ----------------------
相关推荐
NULL 博文链接:https://840198532-qq-com.iteye.com/blog/1492498
数电课程设计---交通灯定时控制系统的设计、制作.docx数电课程设计---交通灯定时控制系统的设计、制作.docx数电课程设计---交通灯定时控制系统的设计、制作.docx数电课程设计---交通灯定时控制系统的设计、制作.docx...
单片机课程设计报告-交通灯控制系统设计.docx单片机课程设计报告-交通灯控制系统设计.docx单片机课程设计报告-交通灯控制系统设计.docx单片机课程设计报告-交通灯控制系统设计.docx单片机课程设计报告-交通灯控制...
单片机课程设计报告-交通灯控制系统设计.pdf单片机课程设计报告-交通灯控制系统设计.pdf单片机课程设计报告-交通灯控制系统设计.pdf单片机课程设计报告-交通灯控制系统设计.pdf单片机课程设计报告-交通灯控制系统...
单片机原理及应用-交通灯控制系统设计.pdf单片机原理及应用-交通灯控制系统设计.pdf单片机原理及应用-交通灯控制系统设计.pdf单片机原理及应用-交通灯控制系统设计.pdf单片机原理及应用-交通灯控制系统设计.pdf...
数字逻辑---交通灯系统设计(HUST) 1-12关 头歌 【一个代码可通12关】 1.7段数码管驱动电路设计 2.4位无符号比较器设计 3.8位无符号比较器设计 4.1位2路选择器设计 5.8位2路选择器设计 6.双向BCD计数器状态机设计 7....
数字逻辑--交通灯系统设计实训.txt
《微机原理与接口技术》课程设计--交通灯系统设计.pdf《微机原理与接口技术》课程设计--交通灯系统设计.pdf《微机原理与接口技术》课程设计--交通灯系统设计.pdf《微机原理与接口技术》课程设计--交通灯系统设计.pdf...
嵌入式系统开发与应用--交通灯系统实训
at89c51单片机-交通灯控制系统(含源码及仿真图)大全.pdfat89c51单片机-交通灯控制系统(含源码及仿真图)大全.pdfat89c51单片机-交通灯控制系统(含源码及仿真图)大全.pdfat89c51单片机-交通灯控制系统(含源码及仿真图)...
深度学习--交通灯数据集深度学习--交通灯数据集深度学习--交通灯数据集深度学习--交通灯数据集深度学习--交通灯数据集深度学习--交通灯数据集深度学习--交通灯数据集深度学习--交通灯数据集深度学习--交通灯数据集...
单片机课程设计--交通灯控制系统.pdf单片机课程设计--交通灯控制系统.pdf单片机课程设计--交通灯控制系统.pdf单片机课程设计--交通灯控制系统.pdf单片机课程设计--交通灯控制系统.pdf单片机课程设计--交通灯控制系统...
单片机课程设计--交通灯控制系统.docx单片机课程设计--交通灯控制系统.docx单片机课程设计--交通灯控制系统.docx单片机课程设计--交通灯控制系统.docx单片机课程设计--交通灯控制系统.docx单片机课程设计--交通灯...
数字逻辑---交通灯系统设计(HUST),全部12个关卡的答案,绝对正确!全网最低价! 看我看我:一定要注意细节,不要1分钟就把作业全做完了,会被平台查到,10分钟完成一关比较合理,这样子就不会被老师发现啦~自己...
电路CAD课程设计--交通信号灯控制系统.pdf电路CAD课程设计--交通信号灯控制系统.pdf电路CAD课程设计--交通信号灯控制系统.pdf电路CAD课程设计--交通信号灯控制系统.pdf电路CAD课程设计--交通信号灯控制系统.pdf电路...
数字逻辑---交通灯系统设计(HUST) 头歌12关通关全代码 本实训将提供一个完整的数字逻辑实验包,从Logisim新手实验,到真值表方式构建7段数码管驱动电路,逻辑表达式方式构建四位比较器,多路选择器,利用同步时序...
头歌教学实践平台计算机组成原理数字逻辑---交通灯系统设计(HUST),第1关—第12关。源代码circ格式,用记事本打开即可。 本实训将提供一个完整的数字逻辑实验包,从Logisim新手实验,到真值表方式构建7段数码管驱动...
华南理工大学-单片机课程设计说明书完整版-交通灯控制.docx华南理工大学-单片机课程设计说明书完整版-交通灯控制.docx华南理工大学-单片机课程设计说明书完整版-交通灯控制.docx华南理工大学-单片机课程设计说明书...
交通管理在线服务-交通管理在线服务系统-交通管理在线服务系统源码-交通管理在线服务管理系统-交通管理在线服务管理系统java代码-交通管理在线服务系统设计与实现-基于springboot的交通管理在线服务系统-基于Web的...