Java高级——交通灯管理系统

本方法模拟了现实生活中的交通信号灯的情况

1.先构建Road类,此类可以创建12个方向的路

代码如下:

 1 package com.springtie.traffic;
 2
 3 import java.util.ArrayList;
 4 import java.util.List;
 5 import java.util.Random;
 6 import java.util.concurrent.ExecutorService;
 7 import java.util.concurrent.Executors;
 8 import java.util.concurrent.ScheduledExecutorService;
 9 import java.util.concurrent.TimeUnit;
10
11 public class Road {
12     // 12个方向的路名
13     private String roadname;
14     // 存储车辆的集合
15     private List<String> vehicle = new ArrayList<String>();
16
17     // 根据每个方向的不同创建不同的路名
18     public Road(String roadname) {
19         this.roadname = roadname;
20         // 向当前路添加1000辆车
21         ExecutorService pool = Executors.newSingleThreadExecutor();
22         pool.execute(new Runnable() {
23             public void run() {
24                 try {
25                     Thread.sleep((new Random().nextInt(10) + 1) * 1000);
26                 } catch (InterruptedException e) {
27                     e.printStackTrace();
28                 }
29                 for (int car = 0; car < 1000; car++) {
30                     // 把车辆添加进来
31                     vehicle.add(roadname + "方向的车辆" + car);
32                     // System.out.println(roadname+"方向的车辆"+car+"正在开过来");
33                 }
34             }
35         });
36         // 当前路上的,灯位绿色的,使其最前面的车辆1秒后穿越马路,再过一秒后上来的最前面车辆穿越马路,如此循环,知道灯变红
37         ScheduledExecutorService timer = Executors.newScheduledThreadPool(1);
38         timer.scheduleAtFixedRate(new Runnable() {
39             public void run() {
40                 if (!vehicle.isEmpty()) {
41                     boolean lampState = Lamp.valueOf(roadname).isLighted();
42                     if (lampState) {
43
44                         System.out.println(vehicle.remove(0) + "穿越马路");
45                     }
46                 }
47             }
48         }, 1, 1, TimeUnit.SECONDS);
49     }
50 }

2.创建交通灯枚举Lamp,通过私有构造函数传入当前灯的对应灯和下一个灯以及当前的状态

代码如下:

 1 package com.springtie.traffic;
 2
 3 public enum Lamp {
 4     // 12个信号灯枚举对象
 5     S2N("N2S", "S2W", false), S2W("N2E", "E2W", false), E2W("W2E", "E2S", false), E2S(
 6             "W2N", "S2N", false), N2S(null, null, false), N2E(null, null, false), W2E(
 7             null, null, false), W2N(null, null, false), S2E(null, null, true), E2N(
 8             null, null, true), N2W(null, null, true), W2S(null, null, true);
 9     // 枚举私有成员变量
10     private String oppositeLamp;
11     private String nextLamp;
12     private boolean lampState;
13
14     // 私有构造函数
15     private Lamp(String oppositeLamp, String nextLamp, boolean lampState) {
16         this.oppositeLamp = oppositeLamp;
17         this.nextLamp = nextLamp;
18         this.lampState = lampState;
19     }
20
21     // 判断是红灯还是绿灯
22     public boolean isLighted() {
23         return lampState;
24     }
25
26     // 让灯变绿,对应灯也变绿
27     public void turnGreen() {
28         this.lampState = true;
29         if (oppositeLamp != null) {
30             Lamp.valueOf(oppositeLamp).turnGreen();
31         }
32         System.out.println("灯:" + this.name() + "为绿灯,+对应等和其他四个灯也为绿灯");
33     }
34
35     // 让灯和对应灯变红,同时让下一个灯变绿,返回下一个灯
36     public Lamp turnRed() {
37         this.lampState = false;
38         if (oppositeLamp != null) {
39             Lamp.valueOf(oppositeLamp).turnRed();
40         }
41         Lamp next = null;
42         if (nextLamp != null) {
43             next = Lamp.valueOf(nextLamp);
44             System.out.println("绿灯:" + this.name() + "    切换为:" + next.name());
45             next.turnGreen();
46         }
47         return next;
48     }
49 }

3.创建灯控系统类LampController,利用此类来控制灯变量的顺序

代码如下:

 1 package com.springtie.traffic;
 2
 3 import java.util.concurrent.Executors;
 4 import java.util.concurrent.ScheduledExecutorService;
 5 import java.util.concurrent.TimeUnit;
 6
 7 public class LampController {
 8     private Lamp currentLamp;
 9
10     public LampController() {
11         currentLamp = Lamp.S2N;
12         // 让当前灯变绿
13         currentLamp.turnGreen();
14         // 单开一个线程,当前灯变红的同时下个等变绿,一直重复
15         ScheduledExecutorService timer = Executors.newScheduledThreadPool(1);
16         timer.scheduleAtFixedRate(new Runnable() {
17             public void run() {
18                 System.out.println("当前灯变红时,返回下个灯并让其变绿");
19                 currentLamp = currentLamp.turnRed();
20             }
21         }, 10, 10, TimeUnit.SECONDS);
22     }
23 }

4.创建一个主类(MainClass)来测试

代码如下:

 1 package com.springtie.traffic;
 2
 3 public class MainClass {
 4
 5     public static void main(String[] args) {
 6         // 代表12条路的方向
 7         String[] directionRoadName = new String[] { "S2N", "S2W", "E2W", "E2S",
 8                 "N2S", "N2E", "W2E", "W2N", "S2E", "E2N", "N2W", "W2S" };
 9         // 把12条路的线程启动
10         for (int i = 0; i < directionRoadName.length; i++) {
11             new Road(directionRoadName[i]);
12         }
13         // 调用灯控系统
14         new LampController();
15     }
16
17 }

至此,一个完整的模拟现实生活中的交通灯管理系统构建完毕。

时间: 2024-12-23 14:37:13

Java高级——交通灯管理系统的相关文章

黑马程序员——【Java高新技术】——案例:交通灯管理系统

一.交通灯管理系统的项目需求 Ø 异步随机生成按照各个路线行驶的车辆 例如: 由南向而来去往北向的车辆 ---- 直行车辆 由西向而来去往南向的车辆 ---- 右转车辆 由东向而来去往南向的车辆 ---- 左转车辆 …… Ø 信号灯忽略黄灯,只考虑红灯和绿灯. Ø 应考虑左转车辆控制信号灯,右转车辆不受信号灯控制. Ø 具体信号灯控制逻辑与现实生活中普通交通灯控制逻辑相同,不考虑特殊情况下的控制逻辑. 注:南北向车辆与东西向车辆交替放行,同方向等待车辆应先放行直行车辆,而后放行左转车辆. Ø 每

黑马程序员-java 7K面试题之交通灯管理系统

------- android培训.java培训.期待与您交流! -------- 交通灯管理系统 模拟实现十字路口的交通灯管理系统逻辑,具体需求如下: 1. 异常随机生成按照各个路线行驶的车辆. 例如: 由南向而来去往北向的车辆----直行车辆 由西向而来去往南向的车辆----右转车辆 由东向而来去往南向的车辆----左转车辆 .......  ...... 2. 信号灯忽略黄灯,只考虑红灯和绿灯. 3. 应该考虑左转车辆控制信号灯,右转车辆不受信号灯控制. 4. 具体信号灯控制逻辑与现实

黑马程序员_交通灯管理系统

(1)项目的需求 模拟实现十字路口的交通灯管理系统逻辑,具体需求如下: 例如: 由南向而来去往北向的车辆 右转车辆 由东向而来去往南向的车辆 ---- 左转车辆 平时开车过十字路口红绿灯的时候,也知道红绿灯运行的顺序 (1)任何方向的车,向右边转弯的时候,是不需要看红绿灯 (2)在十字路口,相对方向的红绿灯的工作方式是一样的,南相对与北,东相对与西,这把它分成两对 (3)红绿灯顺序,一对直行通道绿灯直行车辆,等直行变红,还是这对的车辆可以左转,等左转变红,就轮到下一对了.所以在设计程序的时候,只

交通灯管理系统

----------- android培训.java培训.java学习型技术博客.期待与您交流! ------------ 交通灯管理系统 模拟实现十字路口的交通灯管理系统逻辑,具体需求如下: ? 异步随机生成按照各个路线行驶的车辆. 例如: 由南向而来去往北向的车辆 ---- 直行车辆 由西向而来去往南向的车辆 ---- 右转车辆 由东向而来去往南向的车辆 ---- 左转车辆 ... ? 信号灯忽略黄灯,只考虑红灯和绿灯. ? 应考虑左转车辆控制信号灯,右转车辆不受信号灯控制. ? 具体信号灯

黑马程序员_JAVA之交通灯管理系统

1.一.需求:模拟实现十字路口的交通灯管理系统逻辑,具体需求如下:  1.异步随机生成按照各个路线行驶的车辆.     例如:     由南向而来去往北向的车辆 右转车辆     由东向而来去往南向的车辆 ---- 左转车辆     ......  2.信号灯忽略黄灯,只考虑红灯和绿灯.  3.应考虑左转车辆控制信号灯,右转车辆不受信号灯控制.  4.具体信号灯控制逻辑与现实生活中普通交通灯控制逻辑相同,不考虑特殊情况下的控制逻辑.     注:南北向车辆与东西向车辆交替放行,同方向等待车辆应先

黑马程序员___交通灯管理系统

----------- android培训.java培训.java学习型技术博客.期待与您交流! --------- 交通灯管理系统的项目需求 异步随机生成按照各个路线行驶的车辆. 例如: 由南向而来去往北向的车辆 ---- 直行车辆 由西向而来去往南向的车辆 ---- 右转车辆 由东向而来去往南向的车辆 ---- 左转车辆 ... 信号灯忽略黄灯,只考虑红灯和绿灯. 应考虑左转车辆控制信号灯,右转车辆不受信号灯控制. 具体信号灯控制逻辑与现实生活中普通交通灯控制逻辑相同,不考虑特殊情况下的控制

黑马程序员—交通灯管理系统

------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 一. 模拟实现十字路口的交通灯管理系统逻辑,具体需求如下:Ø 异步随机生成按照各个路线行驶的车辆. 例如: 由南向北的车辆 ---- 直行车辆 由西向南的车辆 ---- 右转车辆 由东向南的车辆 ---- 左转车辆 ... Ø 信号灯忽略黄灯,只考虑红灯和绿灯. Ø 应考虑左转车辆控制信号灯,右转车辆不受信号灯控制. Ø 具体信号灯控制逻辑与现实生活中普通交通灯控制逻辑相同,不考虑特殊情况下的

黑马程序员--关于交通灯管理系统的分析和思考

------- <a href="http://www.itheima.com" target="blank">android培训</a>.<a href="http://www.itheima.com" target="blank">java培训</a>.期待与您交流! ---------- 1. 交通灯管理系统的项目需求 (1).异步随机生成按照各个路线行驶的车辆 (2).信

多线程实战(一) : 交通灯管理系统

一. 项目要求: 模拟实现十字路口的交通灯管理系统逻辑,具体需求如下: 1. 异步随机生成按照各个路线行驶的车辆. 例如: 由南向而来去往北向的车辆 ---- 直行车辆 由西向而来去往南向的车辆 ---- 右转车辆 由东向而来去往南向的车辆 ---- 左转车辆 ... 2. 信号灯忽略黄灯,只考虑红灯和绿灯. 3. 应考虑左转车辆控制信号灯,右转车辆不受信号灯控制. 4. 具体信号灯控制逻辑与现实生活中普通交通灯控制逻辑相同,不考虑特殊情况下的控制逻辑. 注:南北向车辆与东西向车辆交替放行,同方