交通灯管理系统
来源:互联网 发布:淘宝网代购服务点利润 编辑:程序博客网 时间:2024/06/01 20:40
------- android培训、java培训、期待与您交流! ----------
1、需求分析:
在一个路口中行驶的线路会有12条,而在这12条的线路中有4条的线路上的车是自由行驶的。也就是向右转向的车
设计时可以设计为常态。不必去考虑其他的问题,而剩下的8条线路就形成了4组也就是“南北直行”,“南到西”,
“北到东”,“东西直行”,“东到南”,“西到北”。这样的四组线路。
2、分析和设计:
初步的设想应该为4个对象。汽车,灯,灯控制器,路。因为不需要出车子的移动过程,值是通过路口的那一时刻
所以只需要3个对象,灯 灯的控制器 和路。
在路的这个对象中有增加车辆的方法和减少车辆的方法。
面向对象设计的重要经验:谁拥有数据谁就对外提供操作这些数据的方法。
在设计灯的类的时候值需要设计四组灯的逻辑即可,因为有另外的四组灯是与这四组灯是相反的
而另外的四组灯设计为常亮的状态的。所以在设计灯的类的时候就要使用到了枚举,用枚举来设计这
四组灯的对象。在灯的属性上只有三个属性:相反方向的灯,下一个方向的灯,和灯的点亮状态
3、根据上面的设计来编写出代码:
Road.java这个类:
其中有两个方法是增加路上的车,和路上的车消失
用到了两种的方法
增加路上的车是用的线程的方法:
ExecutorService pool = Executors.newFixedThreadPool(1);//这是一个线程池的概念 pool.execute(new Runnable(){ @Override public void run() { // TODO Auto-generated method stub for(int i=0;i<100;i++){ try { Thread.sleep(1000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } vechicles.add(Road.this.name+"_"+i); } }});
路上消失的车需要用到了定时器,去定时的让路上的车消失
ScheduledExecutorService timer = Executors.newScheduledThreadPool(1); timer.scheduleAtFixedRate(new Runnable(){ public void run(){ boolean ligther = Lamp.valueOf(Road.this.name).isLigthed(); if(ligther){ System.out.println(vechicles.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 boolean lighted; //灯亮的属性 private String opposite; //相对灯的属性 private String next; //下一个灯的属性
灯亮的方法:
public void light(){ this.lighted = true; if(opposite!=null){ Lamp.valueOf(opposite).light(); } System.out.println(name() + " lamp is green,下面总共应该有6个方向能看到汽车穿过!"); }
灯灭的方法:
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; }
定义灯的控制器的类:其中也使用到了定义器。没隔10秒钟一变
control = Lamp.S2N; control.light(); ScheduledExecutorService timer = Executors.newScheduledThreadPool(1); timer.scheduleAtFixedRate(new Runnable(){ public void run(){ control = control.blackOut(); } }, 10, 10, TimeUnit.SECONDS); }
然后再写一个测试的类:
一起初始化那12个方向的对象
String[] directions = new String[]{"S2N","S2W","E2W","E2S","N2S","N2E","W2E", "W2N","S2E","E2N","N2W","W2S"}; for(int i=0;i<directions.length;i++){ new Road(directions[i]); } new LampControl();//实例化灯控制器的类
- 交通灯管理系统
- 交通灯管理系统
- 交通灯管理系统笔记
- 交通灯管理系统
- 交通灯管理系统
- 交通灯管理系统
- 交通灯管理系统
- 交通灯管理系统
- 交通灯管理系统
- 交通灯管理系统项目
- 模拟交通灯管理系统
- 交通灯管理系统
- 交通灯管理系统
- java--交通灯管理系统
- 20110508交通灯管理系统
- 交通灯管理系统
- 交通灯管理系统
- 交通灯管理系统视频
- JAVA 基础加强1
- HDU3756二分或三分求满足题意的圆锥体积
- mysql :1005 - Can't create table 'sdzserp.roll_mirror_sequence11' (errno: 121)
- JAVA 基础加强2
- hibernate中联合主键的一种写法
- 交通灯管理系统
- Error "An error occurred while Internet Connection Sharing was being enabled. (null)"
- MPEG压缩中的 I、B、P帧
- 系统调用
- win7下重新安装sql server2008
- 大端、小端模式,网络字节序,多字节字符、Unicorn字符存储
- Protocol Buffer介绍(Java)
- ubantu系统更新后无法从Windows系统引导进入的解决方法
- Caught exception while loading file struts-default.xml - [unknown location]