黑马视频学习-交通灯
来源:互联网 发布:ubuntu磁盘空间不足 编辑:程序博客网 时间:2024/04/28 09:43
---------------------- android培训、java培训、期待与您交流! ----------------------
今晚学习了交通灯的视频,
感觉老师的代码很简练很实用。
不知道要多久才能像张老师一样牛。
交通灯的问题,首先要创建一个路的对象,要实现几个功能。
路口有很多个方向,每个方向当绿灯时就应该有可能有车通过。
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();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();}vechicles.add(Road.this.name + "_" + i);}}});ScheduledExecutorService timer = Executors.newScheduledThreadPool(1);timer.scheduleAtFixedRate(new Runnable() {public void run() {if (vechicles.size() > 0) {boolean lighted = Lamp.valueOf(Road.this.name).isLighted();if (lighted) {System.out.println(vechicles.remove(0) + " is traversing!");}}}}, 1, 1, TimeUnit.SECONDS);}}
还要有灯对象,这里老师用的是枚举。
因为灯一共有12个方向,其中右转是一直都可以通行。
当南向直行可以通行的时候北向直行也应可以通行。
同样的南向左转的时候北向左转也一样应可以通行。
这里灯要有这样几个方法,灯转绿,灯转红。其中变成红灯的时候要将下一个方向的灯变绿。
这里面的构造方法需要传3个参数和其一致变化的方向,变红的时候变绿的方向,灯的初始状态。
package com.isoftstone.interview.traffic;// SM南向直行,SL南向左转,EM东向直行,EL东向左转,// NM北向直行,NL北向左转,WM西向直行,WL系向左转,// SR南向右转,ER东向右转,NR北向右转,WR西向右转.public enum Lamp {SM("NM", "SL", false), SL("NL", "EM", false), EM("WM", "EL", false), EL("WL", "SM", false), NM(null, null, false), NL(null, null, false), WM(null, null, false), WL(null, null, false), SR(null, null, true), ER(null, null, true), NR(null, null, true), WR(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 opposite;private String next;public boolean isLighted() {return lighted;}public void light() {this.lighted = true;if (opposite != null)Lamp.valueOf(opposite).light();System.out.println(name() + "lamp is green.");}public Lamp blackOut() {this.lighted = false;if (opposite != null)Lamp.valueOf(opposite).blackOut();System.out.println(name() + "lamp is red.");Lamp nextLamp = null;if (next != null) {nextLamp = Lamp.valueOf(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.SM;currentLamp.light();ScheduledExecutorService timer = Executors.newScheduledThreadPool(1);timer.scheduleAtFixedRate(new Runnable(){public void run() {currentLamp = currentLamp.blackOut();}},10,10,TimeUnit.SECONDS);}}
这些都完成以后,问题就简单很多了。
我们要创建一个MainClass,来实现这个交通系统的运作。
package com.isoftstone.interview.traffic;public class MainClass {public static void main(String[] args) {String[] directions = new String[] { "SM", "SL", "EM", "EL", "NM", "NL", "WM","WL", "SR", "ER", "NR", "WR" };for (int i = 0; i < directions.length; i++) {new Road(directions[i]);}new LampController();}}
跟着老师学习了整个交通系统的编译过程。
看起来很简单,但是关掉视频之后自己写起来还是有很多写不出来的地方。
自己学的知识还不够丰富,而且学的太死板。
真希望能够加入第五期的学习,让自己能够更快的成长起来。
---------------------- android培训、java培训、期待与您交流! ----------------------
- 黑马视频学习-交通灯
- 交通灯管理系统视频学习
- 黑马程序员--交通灯项目视频总结
- 黑马程序员-交通灯管理系统视频
- 黑马程序员---交通灯学习总结
- 黑马程序员--交通灯系统学习
- 黑马程序员----交通灯学习笔记
- 黑马程序员--交通灯案例学习
- 黑马程序员----【张孝祥7K面试题】一交通灯管理系统视频学习笔记
- 张孝祥老师交通灯管理系统视频学习
- 黑马程序员 交通灯管理学习日记
- 黑马程序员交通灯管理系统学习日记
- 黑马程序员之交通灯系统分析学习
- 黑马程序员-----交通灯管理系统学习日志
- 黑马程序员:交通灯管理系统学习
- 黑马程序员---交通灯管理系统 学习笔记
- 黑马程序员--学习--交通灯系统(摘)
- 黑马程序员-交通灯管理系统学习笔记
- 移动“三国演义”【转】
- linux下php快速升级 5.2.6(1)用yum(2)重新编译安装
- ASIHTTPRequest中HTTP请求解释
- 再写——Prim && Kruskal
- 一个牛人给我们的建议
- 黑马视频学习-交通灯
- iPhone文件系统NSFileManager讲解
- 动态库与静态库的区别
- C++中delete和delete[]的区别
- 案例各个类或jsp文件之间的关系画图
- have a break
- apache虚拟目录配置(1)--多端口配置
- Servlet文件下载
- Cocos2D 安装 (xcode4 xcode3)