黑马程序员_12月21日

来源:互联网 发布:深圳gis数据下载 编辑:程序博客网 时间:2024/05/17 03:05

----------------------android培训java培训、期待与您交流! ----------------------

交通灯管理系统


1、画图分析:共有12条线路。实际只需考虑4种情况。


2、对象抽象:
灯、灯的控制系统、路(包括车的序列)
【谁拥有数据,谁就应该有操作数据的方法。】


3、具体类设计:

public class Road {private List<String> vehicles = new ArrayList<String>();  //当前路上所有的车。private String name =null; //路名。public Road(String name){this.name = name;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();}vehicles.add(Road.this.name + "_" + i);  //增加车辆}}});ScheduledExecutorService timer =  Executors.newScheduledThreadPool(1);  //定时器,参数“1”是指容纳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 traversing !");//打印哪辆车正在通过路口}}}},1,  //多久后开始1,  //间隔多久执行一次TimeUnit.SECONDS);  //时间单位}}

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 boolean lighted;/*与当前灯同时为绿的对应方向*//*private Lamp opposite;为何要使用字符串?因为每个灯都是一个对象,在最开始初始化灯时,对面灯的对象还没有建立,直接使用会报错。*/private String opposite;/*当前灯变红时下一个变绿的灯*/private String next;public boolean isLighted(){return lighted;}/** * 某个灯变绿时,它对应方向的灯也要变绿 */public void light(){this.lighted = true;if(opposite != null){  //4组需要变换的灯中只需要一半做这个处理,以防死循环!Lamp.valueOf(opposite).light();}//System.out.println(name() + " lamp is green,下面总共应该有6个方向能看到汽车穿过!");}/** * 某个灯变红时,对应方向的灯也要变红,并且下一个方向的灯要变绿 * @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;}}

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);}}

---------------------- android培训、java培训、期待与您交流! ----------------------

详细请查看:http://edu.csdn.net/heima

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 宝宝腿走路膝盖弯曲怎么办 两岁宝宝不爱走路怎么办 水鸭子脚不能走了怎么办 鸭子坐着脚走不动怎么办 鸭子步走了腿疼怎么办? 跳爵士舞没感觉怎么办 军校学员体能考核不达标怎么办 俯卧撑新兵连做不动怎么办 宝宝胆小不敢上体能课怎么办 28岁老太太抬头纹剩两颗怎么办 大腿前侧抽筋痛怎么办 电脑看片缓冲慢怎么办 跑步跑的腿疼怎么办 第一次去健身房练瑜伽不会怎么办 跑步过后腿筋疼怎么办 俯卧撑只能做20个怎么办 被裤裆峰咬了怎么办? 新兵5公里不想跑怎么办 老公掉粪坑了你怎么办 在部队被欺负了怎么办 衣服上的标志洗掉了怎么办 整件白衬衣被染怎么办 遇到敲诈小混混该怎么办 纯棉衣服洗长了怎么办 纯棉的衣服洗后长了怎么办 睡觉把脖子扭了怎么办 微信限额10万了怎么办 新兵条令背不下来怎么办 武警部队改革去年入伍的新兵怎么办 规培考试没考上怎么办 规培如果没考上怎么办 农民工集体讨薪 领导不在怎么办 卷闸门钥匙丢了怎么办 邻居把路堵了该怎么办 邻居家的盆栽对准我家大门怎么办 袜子掉到了楼下的阳台怎么办? 合租房没有阳台晒衣服怎么办 车门锁了钥匙在里面怎么办 邻居忘带钥匙你看见会怎么办 把车钥匙锁车里了怎么办 偷了东西不承认怎么办