Java高级——交通灯管理系统
本方法模拟了现实生活中的交通信号灯的情况
1.先构建Road类,此类可以创建12个方向的路
代码如下:
package com.springtie.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 {
// 12个方向的路名
private String roadname;
// 存储车辆的集合
private List<String> vehicle = new ArrayList<String>(); // 根据每个方向的不同创建不同的路名
public Road(String roadname) {
this.roadname = roadname;
// 向当前路添加1000辆车
ExecutorService pool = Executors.newSingleThreadExecutor();
pool.execute(new Runnable() {
public void run() {
try {
Thread.sleep((new Random().nextInt(10) + 1) * 1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
for (int car = 0; car < 1000; car++) {
// 把车辆添加进来
vehicle.add(roadname + "方向的车辆" + car);
// System.out.println(roadname+"方向的车辆"+car+"正在开过来");
}
}
});
// 当前路上的,灯位绿色的,使其最前面的车辆1秒后穿越马路,再过一秒后上来的最前面车辆穿越马路,如此循环,知道灯变红
ScheduledExecutorService timer = Executors.newScheduledThreadPool(1);
timer.scheduleAtFixedRate(new Runnable() {
public void run() {
if (!vehicle.isEmpty()) {
boolean lampState = Lamp.valueOf(roadname).isLighted();
if (lampState) { System.out.println(vehicle.remove(0) + "穿越马路");
}
}
}
}, 1, 1, TimeUnit.SECONDS);
}
}
2.创建交通灯枚举Lamp,通过私有构造函数传入当前灯的对应灯和下一个灯以及当前的状态
代码如下:
package com.springtie.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 String oppositeLamp;
private String nextLamp;
private boolean lampState; // 私有构造函数
private Lamp(String oppositeLamp, String nextLamp, boolean lampState) {
this.oppositeLamp = oppositeLamp;
this.nextLamp = nextLamp;
this.lampState = lampState;
} // 判断是红灯还是绿灯
public boolean isLighted() {
return lampState;
} // 让灯变绿,对应灯也变绿
public void turnGreen() {
this.lampState = true;
if (oppositeLamp != null) {
Lamp.valueOf(oppositeLamp).turnGreen();
}
System.out.println("灯:" + this.name() + "为绿灯,+对应等和其他四个灯也为绿灯");
} // 让灯和对应灯变红,同时让下一个灯变绿,返回下一个灯
public Lamp turnRed() {
this.lampState = false;
if (oppositeLamp != null) {
Lamp.valueOf(oppositeLamp).turnRed();
}
Lamp next = null;
if (nextLamp != null) {
next = Lamp.valueOf(nextLamp);
System.out.println("绿灯:" + this.name() + " 切换为:" + next.name());
next.turnGreen();
}
return next;
}
}
3.创建灯控系统类LampController,利用此类来控制灯变量的顺序
代码如下:
package com.springtie.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.turnGreen();
// 单开一个线程,当前灯变红的同时下个等变绿,一直重复
ScheduledExecutorService timer = Executors.newScheduledThreadPool(1);
timer.scheduleAtFixedRate(new Runnable() {
public void run() {
System.out.println("当前灯变红时,返回下个灯并让其变绿");
currentLamp = currentLamp.turnRed();
}
}, 10, 10, TimeUnit.SECONDS);
}
}
4.创建一个主类(MainClass)来测试
代码如下:
package com.springtie.traffic; public class MainClass { public static void main(String[] args) {
// 代表12条路的方向
String[] directionRoadName = new String[] { "S2N", "S2W", "E2W", "E2S",
"N2S", "N2E", "W2E", "W2N", "S2E", "E2N", "N2W", "W2S" };
// 把12条路的线程启动
for (int i = 0; i < directionRoadName.length; i++) {
new Road(directionRoadName[i]);
}
// 调用灯控系统
new LampController();
} }
至此,一个完整的模拟现实生活中的交通灯管理系统构建完毕。
Java高级——交通灯管理系统的更多相关文章
- java 7K交通灯管理系统面试题
交通灯管理系统 模拟实现十字路口的交通灯管理系统逻辑.详细需求例如以下: 1. 异常随机生成依照各个路线行驶的车辆. 比如: 由南向而来去往北向的车辆----直行车辆 由西向而来去往 ...
- 黑马程序员——【Java高新技术】——案例:交通灯管理系统
---------- android培训.java培训.期待与您交流! ---------- 一.交通灯管理系统的项目需求 Ø 异步随机生成按照各个路线行驶的车辆 例如: 由南向而来去往北向的车辆 - ...
- 黑马程序员:Java编程_7K面试题之交通灯管理系统
=========== ASP.Net+Android+IOS开发..Net培训.期待与您交流!=========== 模拟实现十字路口的交通灯管理系统逻辑,具体需求如下: 异步随机生成按照各个路线行 ...
- java交通灯管理系统项目
交通灯管理系统 模拟实现十字路口的交通灯管理系统逻辑,具体需求如下: 异步随机生成按照各个路线行驶的车辆. 例如: 由南向而来去往北向的车辆 ---- 直行车辆 由西向而来去往南向的车辆 ---- ...
- Java基础---Java---面试题---交通灯管理系统(面向对象、枚举)
交通灯管理系统的项目需求: 模拟实现十字路口的交通灯管理系统逻辑,具体需求如下: 1.异步随机生成按照各个路线行驶的车辆 例如: 由南向而来去往北向的车辆-----直行车辆 由西向而来去往南 ...
- java 面试题之交通灯管理系统
需求: 交通灯管理系统的项目需求 Ø 异步随机生成按照各个路线行驶的车辆. 例如: 由南向而来去往北向的车辆 ---- 直行车辆 由西向而来去往南向的车辆 ---- 右转车辆 由东向而来去往南向的车辆 ...
- 黑马程序员_JAVA之交通灯管理系统
------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 1.一.需求:模拟实现十字路口的交通灯管理系统逻辑,具体需求如下: 1.异步随机生成按照各个路 ...
- 黑马程序员_7K月薪面试题之_交通灯管理系统
----------- android培训.java培训.java学习型技术博客.期待与您交流! --------- 1,交通灯管理系统的项目需求 模拟实现十字路口的交通灯管理系统逻辑,具体需求如下: ...
- 黑马程序员_java基础笔记(14)...交通灯管理系统_编码思路及代码
—————————— ASP.Net+Android+IOS开发..Net培训.期待与您交流! —————————— 1,面试题——交通灯管理系统 模拟实现十字路口的交通灯管理系统逻辑,具体需求如下: ...
随机推荐
- 4185 Oil Skimming 最大匹配 奇偶建图
题目大意: 统计相邻(上下左右)的‘#’的对数. 解法: 与题目hdu1507 Uncle Tom's Inherited Land*类似,需要用奇偶建图.就是行+列为奇数的作为X集合,偶尔作为Y集合 ...
- java 简单工厂模式实现
简单工厂模式:也可以叫做静态工厂方法,属于类创建型模式,根据不同的参数,返回不同的类实现. 主要包含了三个角色: A.抽象产品角色 一般用接口 或是 抽象类实现 B.具体的产品角色,具体的类的实现 C ...
- Ubuntu安装配置Python.pyDev
一:安装ECLipse Eclipse官网下载软件tar包: 使用解压命令: sudo tar xzvf xxxxx.tar.gz -c /opt/ 创建快捷方式到桌面. 二:安装python-Num ...
- CSS text-transform 属性 控制控制文本的大小写
值 描述 none 默认.定义带有小写字母和大写字母的标准的文本. capitalize 文本中的每个单词以大写字母开头. uppercase 定义仅有大写字母. lowercase 定义无大写字母, ...
- 从U盘安装CentOS7.3教程(转载)
0.准备工作: 一台没系统的普通电脑u盘一个(大于1G,最小安装的话不超过1G,根据选择系统大小匹配U盘即可) CentOS7.3 iso文件一个UltraISO工具 1.制作U盘 ①使用UltraI ...
- JDBC连接MySQL数据库(一)——数据库的基本连接
JDBC的概念在使用之前我们先了解一下JDBC的概念, JDBC的全称是数据库连接(Java Database Connectivity),它是一套用于执行SQL语句时的API,应用程序可以通过这套A ...
- 【JavaScript框架封装】实现一个类似于JQuery的CSS样式框架的封装
// CSS 样式框架 (function (xframe) { // 需要参与链式访问的(必须使用prototype的方式来给对象扩充方法)[只要是需要使用到this获取到的元素集合这个变量的时候, ...
- Linux 文件压缩
压缩工具 compress/uncompress:对应 .Z 结尾的压缩格式文件 压缩格式:gz.bz2.xz.zip.Z gzip 压缩文件并删除源文件(生成.gz的文件) gunzip 解 ...
- 2019-03-28 SQL Server char/nchar/nvarchar
带n 的是用于处理unicode 字符,即处理中英文的字符 一般来说,如果含有中文字符,用nchar/nvarchar,如果纯英文和数字,用char/varchar char 定长 char(10), ...
- 【XSY2384】【GDOI2017】微信
致去年的我:这是道广义SAM模板题啊…… 题意: Description Input Output HINT $1\leq N\leq 20$,$1\leq Q\leq 10^5$,字符串总长$\le ...