java张孝祥(6) 交通灯管理系统
2012-01-31 13:49
330 查看
这个项目要是给我来写,我一定没有张老师写的好,之前没涉及过枚举类,不会使用,通过老师的讲解,以及分析思路,让我更加明白业务逻辑。
看来去黑马学习一定没有错,我一定要成为黑马的一员。
下面是老师的代码,我加以注释。
Lamp.java
package com.ici.interview.traffic; public enum Lamp { /* 创建12中路线的灯,以及设定他们相关联的上下灯,并设定灯的当前状态是否为绿灯*/ 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 oppoite,String next,boolean lighted){ this.opposite = oppoite; this.next = next; this.lighred = lighted; } private boolean lighred; private String opposite; private String next; /* 返回当前灯是否为绿*/ public boolean isLighted(){ return lighred; } //开灯 public void light(){ this.lighred = true; if(opposite!=null){ Lamp.valueOf(opposite).light(); } System.out.println(name() + " Lamp is green !"); } //关灯 public Lamp blackOut(){ this.lighred = true; if(opposite!=null){ Lamp.valueOf(opposite).blackOut(); } //注意这里要设置为空不要赋值 Lamp nextLamp = null; if(next!=null){ System.out.println("绿灯从 " +name()+ " 切换为 " +next); nextLamp = Lamp.valueOf(opposite); Lamp.valueOf(opposite).light(); } return nextLamp; } }
Road.java
package com.ici.interview.traffic; import java.util.ArrayList; 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 ArrayList<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=0; i<1000; i++) { try { Thread.sleep((new Random().nextInt(5)+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); } }
Main.java
package com.ici.interview.traffic; public class Main { public static void main(String[] args) { 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 LampController(); } }
LampController.java
package com.ici.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); timer.scheduleAtFixedRate( new Runnable() { public void run() { currentLamp = currentLamp.blackOut(); } }, 10, 10, TimeUnit.SECONDS); } }
相关文章推荐
- java实训——交通灯管理系统
- Java基础---Java---面试题---交通灯管理系统(面向对象、枚举)
- 黑马程序员java学习日记十六 7k面试题交通灯管理系统讲解
- 黑马程序员——java面试中常遇到的面试项目——交通灯系统管理项目
- 黑马程序员——Java交通灯管理系统&银行业务系统
- 交通灯管理系统——向张孝祥老师学习
- 黑马程序员——java基础项目:交通灯管理系统项目实战
- 黑马程序员-----张孝祥-7K月薪面试题破解之一_交通灯管理系统视频教程观后总结
- 黑马程序员----java编程之交通灯管理系统
- 黑马程序员 17 Java基础教学 - 17 - 交通灯管理系统
- Java基础---Java---面试题---交通灯管理系统(面向对象、枚举)
- 黑马程序员—java交通灯管理系统
- 黑马程序员——Java面试题交通灯管理系统
- 黑马程序员_java交通灯管理系统
- 【学习并改进】黑马程序员-张孝祥-交通灯管理系统业务
- 黑马程序员—Java基础学习笔记之7K月薪面试题破解_交通灯管理系统
- java_交通灯管理系统_1
- 黑马程序员—java之交通灯管理系统理解
- 黑马程序员-java交通灯管理系统
- 黑马程序员__JAVA项目分析__交通灯管理系统