黑马程序员-交通灯管理系统
来源:互联网 发布:农副产品交易网软件 编辑:程序博客网 时间:2024/06/04 19:23
---------------------android培训、java培训、期待与您交流! -------------------------
产品需求:
- 异步随机生成按照各个路线行驶的车辆。例如:
由南向而来去往北向的车辆 ---- 直行车辆
由西向而来去往南向的车辆 ---- 右转车辆
由东向而来去往南向的车辆 ---- 左转车辆 - 信号灯忽略黄灯,只考虑红灯和绿灯。
- 应考虑左转车辆控制信号灯,右转车辆不受信号灯控制。
- 具体信号灯控制逻辑与现实生活中普通交通灯控制逻辑相同,不考虑特殊情况下的控制逻辑。
注:南北向车辆与东西向车辆交替放行,同方向等待车辆应先放行直行车辆而后放行左转车辆。 - 每辆车通过路口时间为1秒(提示:可通过线程Sleep的方式模拟)。
- 随机生成车辆时间间隔以及红绿灯交换时间间隔自定,可以设置。
- 不要求实现GUI,只考虑系统逻辑实现,可通过Log方式展现程序运行结果。
系统常量:
package com.uc.traffic;//随机生成车辆时间间隔以及红绿灯交换时间间隔自定public final class Constants {/** * 交通灯时间切换常数,单位 s */public static final int LAMPINTERVAL = 10;/** * 生成车辆时间间隔 */public static final int PRODUCEINTERVAL = 10;}
交通灯功能模拟:
package com.uc.traffic;public enum Lamp {S2N("S2W", false, "N2S"), S2W("E2W", false, "N2E"), E2W("E2S", false, "W2E"), E2S("S2N", false, "W2N"),N2S(null, false, null), N2E(null, false, null), W2E(null, false, null), W2N(null, false, null),S2E(null, true, null), E2N(null, true, null), N2W(null, true, null), W2S(null, true, null);private Lamp(String next, boolean light, String opposite) {this.next = next;this.light = light;this.opposite = opposite;}public boolean isLight() {return this.light;}public void light() {this.light = true;if (null != this.opposite) {Enum.valueOf(Lamp.class, this.opposite).light();}System.out.println("The lighted lamp is " + this.name());}public Lamp blackOut() {this.light = false;if (null != this.opposite) {Enum.valueOf(Lamp.class, this.opposite).blackOut();}System.out.println("The black lamp is " + this.name());Lamp lamp = null;if (this.next != null) {lamp = Enum.valueOf(Lamp.class, this.next);lamp.light();}return lamp;}private String opposite;private String next;private volatile boolean light;}
交通灯切换控制
package com.uc.traffic;import java.util.concurrent.Executors;import java.util.concurrent.ScheduledExecutorService;import java.util.concurrent.TimeUnit;/* * 随机生成车辆时间间隔以及红绿灯交换时间间隔自定,可以设置。 */public class LampController {public LampController() {currentLamp = Lamp.S2N;currentLamp.light();ScheduledExecutorService timer = Executors.newScheduledThreadPool(1);timer.scheduleAtFixedRate(new Runnable() {@Overridepublic void run() {currentLamp = currentLamp.blackOut();}}, 0, Constants.LAMPINTERVAL, TimeUnit.SECONDS);}private Lamp currentLamp;}
异步生成车辆,控制车辆通行
package com.uc.traffic;import java.util.List;import java.util.Random;import java.util.Vector;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;import java.util.concurrent.ScheduledExecutorService;import java.util.concurrent.TimeUnit;public class Road {private static final int COUNT = 100;private static final Random generator = new Random();public Road(String name) {this.name = name;ExecutorService service = Executors.newSingleThreadExecutor();//随机添加车辆service.execute(new Runnable() {@Overridepublic void run() {for (int i = 1; i < COUNT; i++) {try {Thread.sleep(generator.nextInt(Constants.PRODUCEINTERVAL) * 1000);} catch (InterruptedException e) {// TODO Auto-generated catch blocke.printStackTrace();}vechicles.add(Road.this.name + "-" + i);}}});//每秒通过一辆车ScheduledExecutorService timer = Executors.newScheduledThreadPool(1);timer.scheduleAtFixedRate(new Runnable() {@Overridepublic void run() {// TODO Auto-generated method stubboolean light = Enum.valueOf(Lamp.class, Road.this.name).isLight();if (light) {if (vechicles.size() > 0) {System.out.println(vechicles.remove(0) + " is travalling");}}}}, 0, 1, TimeUnit.SECONDS);}//两个线程同时对集合容器进行操作, 要考虑同步private List<string> vechicles = new Vector<string>();private String name;}</string></string>
主控制类
public class MainClass {/** * @param args */public static void main(String[] args) {String[] roads = {"S2N","S2W","E2W","E2S","N2S","N2E","W2E","W2N","S2E","E2N","N2W","W2S"};for (int i = 0; i < roads.length; i++) {new Road(roads[i]);}new LampController();}}
---------------------android培训、java培训、期待与您交流! -------------------------
0 0
- 《黑马程序员》交通灯管理系统
- 黑马程序员----交通灯管理系统
- <黑马程序员>交通灯管理系统
- 【黑马程序员】交通灯管理系统
- 黑马程序员 交通灯管理系统
- 黑马程序员--交通灯管理系统
- 黑马程序员--交通灯管理系统
- 黑马程序员--交通灯管理系统
- 《黑马程序员》交通灯管理系统
- 黑马程序员--交通灯管理系统
- 黑马程序员:交通灯管理系统
- 黑马程序员--交通灯管理系统
- 黑马程序员 交通灯管理系统
- 黑马程序员-交通灯管理系统
- 黑马程序员-交通灯管理系统
- 黑马程序员-------交通灯管理系统
- 黑马程序员--交通灯管理系统
- 黑马程序员-交通灯管理系统
- 黑马程序员_ThreadLocal_20
- atmaslld sdsv
- 第三周__冒泡排序和归并排序
- uva 11462 Age Sort
- 小菜鸟要开始加油 -- 致自己
- 黑马程序员-交通灯管理系统
- 抽象类的形象描述
- [Android]左右滑屏的实现
- 痛风排酸·通痹胶囊治疗痛风、效果不错
- Android--手势滑屏及左右滑屏
- Eclipse搭建C语言开发环境
- 今日嗅评:搜狗可以搜索微信公众号了,是被腾讯派来探路的吧
- error C2784--------使用map遇到的小问题
- 搜狗网址导航带学子享受美好假期