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

Java面向对象——交通灯管理系统 交通灯管理系统 模拟实现十字路口的交通灯管理系统逻辑,具体需求如下: ●       异步随机生成按照各个路线行驶的车辆。 例如: 由南向而 阅读详情

---------------------- ASP.Net+Unity开发、.Net培训、期待与您交流! ----------------------


面试题要求:

1.异步随机生成按照各种路线行驶的车辆。
例如:
由南向而来去往北向的车辆--------直行车辆
由西向而来去往南向的车辆--------右转车辆
由东向而来去往南向的车辆--------左转车辆
。。。。。

2.信号灯忽略黄灯,只考虑红灯和绿灯

3.应考虑左转车辆控制信号灯,右转车辆不受信号的控制

4.具体信号灯控制逻辑与现实生活中普通交通灯控制逻辑相同,不考虑特殊情况下的控制逻辑
注:南北向车辆与东西向车辆交替放行,同方向等待车辆应先放行直行车辆后放行左转车辆

5.每辆车通过路口时间为1秒(可通过sleep的方法模拟)

6.随机生成车辆时间间隔以及红绿灯交换时间间隔自定,可以自行设置

7.不要求实现GUI,只考虑系统逻辑实现,可通过LOG方式展现程序运行结果

编程思想:
用S,N,E,W分别表示南,北,东,西方向,S2N代表由南往北的信号灯,余下依次类推。来考虑一个完整的信号灯循环:
1.S2N亮,由南向而来去往北向的直行车辆通行,同时四个方向的右转车辆通行。
2.接着S2W亮,S2N灭,由南向而来去往西向的左转车辆通行,同时四个方向的右转车辆通行。
3.接着E2W亮,S2W灭,由西向而来去往东向的直行车辆通行,同时四个方向的右转车辆通行。
4.接着E2S亮,E2W灭,由西向而来去往北向的左转车辆通行,同时四个方向的右转车辆通行。
。。。。。。
我们发现S2N-N2S,S2W-N2E,E2W-W2E,E2S-W2N是一一对应的,另外四个控制因为是控制右转车辆的,不考虑。
因此只需控制S2N,S2W,E2W,E2S四个灯的亮灭即可。

//产生车辆的工厂,每辆车都对应有一个唯一的车牌号

<span style="font-family:KaiTi_GB2312;font-size:18px;">public class vechiclesCenter 
{
	private static int lastNumber = 0;
	private static vechiclesCenter instance = new vechiclesCenter();
	
	public static  vechiclesCenter getCarCenter()
	{
		return instance;
	}
	
	public int incCar()
	{
		return (++lastNumber);
	}	
}</span>

//定义一个枚举,用于表示12个灯的状态

<span style="font-family:KaiTi_GB2312;font-size:18px;">public enum Lamp 
{
	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 opposition,next; //对面灯和下一个灯的枚举对象名字
	private boolean lighted;	//表示灯的亮灭状态
	
	private Lamp(String oppsotion,String next,boolean lighted)  //构造函数,每个对象都对应有对面灯,下一个灯和灯的状态
	{
		this.opposition = oppsotion;
		this.next = next;
		this.lighted = lighted;
	}
	
	//得到灯的状态
	public boolean isLighted() 
	{
		return lighted;
	}
	
	//将当前灯便绿
	public void light()
	{
		this.lighted = true; 	//将当前灯的lighted 置为true
		if(this.opposition != null)	//判断opposition变量是否为null,否则会陷入死循环
		{
			Lamp.valueOf(opposition).light();
		}
		System.out.println(name() +" 绿了,现在有6个方向上的车正在通行!!");
	}
	
	//将当前变红,同时将下一个灯变绿
	public Lamp blackOut()
	{
		this.lighted = false; //将当前灯的lighted 置为false
		if(this.opposition != null)
		{
			Lamp.valueOf(this.opposition).blackOut();
		}		
		
		Lamp nextTmpString = null;
		if(this.next != null)
		{
			nextTmpString = Lamp.valueOf(this.next);  //得到下一个灯的枚举对象
			System.out.println("绿灯方向转向了 "+ this.next);
			nextTmpString.light();			//将下一个灯变绿
		}
		
		return nextTmpString;
	}
}</span>

//该类根据为每个方向上的道路创建两个线程,第一个线程按随机间隔时间添加往这个方向上通行的车辆,第二个线程按照1s时间间隔判断这个方向上的交通灯状态。并且创建一个存放该通行该路线的车辆的容器

<span style="font-family:KaiTi_GB2312;font-size:18px;">public class Road
{
	private List<String> carList = new ArrayList<String>(); //存放车辆的容器
	private String name = null;                //该路线对应的方向名称
	Road(String name) 
	{
		this.name  = name;         
		Executors.newSingleThreadExecutor().execute(new Runnable()   //该线程负责不断往容器中添加车辆
		{
			public void run()
			{
				while(true)
				{
					try 
					{
						Thread.sleep((new Random().nextInt(10)+1)*1000);  //添加车辆前睡眠一个随机时间,模拟不断到来的随机车辆
						carList.add(Road.this.name+" 方向上的"+vechiclesCenter.getCarCenter().incCar()+"车"); //往容器中添加车辆
					} 
					catch (Exception e) 
					{
						e.printStackTrace();
					}
				}

			}
		});
		
		Executors.newScheduledThreadPool(1).scheduleAtFixedRate(    //该线程每隔一秒时间检查该线路的灯的情况。
				new Runnable() 
				{

					public void run()
					{
						if(carList.size() > 0)  //如果该方向上有车辆要通行
						{
							if(Lamp.valueOf(Road.this.name).isLighted())  //如果该方向上的灯是绿的
							{
								System.out.println(carList.remove(0)+" 正在通行");  //从容器中取出一辆车模拟该车在该路线上通行
							}
						}
					}
				}, 
				1, 
				1, 
				TimeUnit.SECONDS);
	}
}</span>

//该类控制交通灯的状态进行循环,先将S2N变绿,创建一个线程每隔10秒点亮当前灯的下一个灯

<span style="font-family:KaiTi_GB2312;font-size:18px;">public class LampCtroller
{
	private Lamp currentLamp;
	public LampCtroller() 
	{
		currentLamp = Lamp.S2N;
		currentLamp.light();
		Executors.newScheduledThreadPool(1).scheduleAtFixedRate(
				new Runnable()
				{

					public void run() 
					{
						System.out.println("come on!!!");   
						currentLamp.blackOut();   //将灭掉当前灯,并点亮下一个灯
					}
				},
				10, 
				10, 
				TimeUnit.SECONDS);
	}
}</span>

//测试

<span style="font-family:KaiTi_GB2312;font-size:18px;">public class MainClass 
{	
	public static void main(String[] args)
	{
		String[] roadsStrings = {"S2N","S2W","E2W","E2S","N2S","N2E","W2E","W2N","S2E","E2N","N2W","W2S"}; //12个等对应的枚举对象的名字
		for(int i=0; i<roadsStrings.length; i++)
			new Road(roadsStrings[i]);         //根据灯名,分别启动一个线程往相应的方向上增加车辆
		new LampCtroller();			   //启动一个线程控制灯的状态
	}

}</span>

程序运行部分结果:

N2S 绿了,现在有6个方向上的车正在通行!!
S2N 绿了,现在有6个方向上的车正在通行!!
W2S 方向上的4 号车 正在通行
S2E 方向上的7 号车 正在通行
N2S 方向上的6 号车 正在通行
E2N 方向上的10 号车 正在通行
N2W 方向上的8 号车 正在通行
S2N 方向上的11 号车 正在通行
N2S 方向上的9 号车 正在通行
N2W 方向上的17 号车 正在通行
come on!!!
绿灯方向转向了 S2W
N2E 绿了,现在有6个方向上的车正在通行!!
S2W 绿了,现在有6个方向上的车正在通行!!
S2W 方向上的3 号车 正在通行
N2E 方向上的2 号车 正在通行
N2E 方向上的16 号车 正在通行
S2W 方向上的21 号车 正在通行
N2E 方向上的20 号车 正在通行
W2S 方向上的22 号车 正在通行
N2W 方向上的24 号车 正在通行
S2E 方向上的27 号车 正在通行
E2N 方向上的29 号车 正在通行
W2S 方向上的28 号车 正在通行
S2E 方向上的32 号车 正在通行
S2W 方向上的33 号车 正在通行
W2S 方向上的36 号车 正在通行
N2E 方向上的37 号车 正在通行
come on!!!
绿灯方向转向了 S2W
N2E 绿了,现在有6个方向上的车正在通行!!
S2W 绿了,现在有6个方向上的车正在通行!!
S2E 方向上的47 号车 正在通行
E2N 方向上的43 号车 正在通行
N2W 方向上的45 号车 正在通行
W2S 方向上的44 号车 正在通行
S2W 方向上的46 号车 正在通行
N2W 方向上的48 号车 正在通行
N2W 方向上的49 号车 正在通行

............................


---------------------- ASP.Net+Unity开发、.Net培训、期待与您交流! ----------------------详细请查看:www.itheima.com

QT下利用FFTW实现功率谱密度分析(周期图法) 写在前面 出于项目需求,需要在QT的msvc 2015编译环境下实现功率谱密度估计。 所以这个需求很直接的关键词就是 1. C++ 2. QT 3. 傅里叶变换 4. 功率谱密度估计 但是在网上搜索了很久,没有一个非常直接的答案。所以我觉得很有必要写一篇文章来说明,在QT msvc2015 32bit环境下如何实现功率谱密度估计。 本文并没有经过严格编辑,但代码是已经可以跑通的,如... 阅读详情

相关推荐

了解你的GPU:深入探讨AMD SMI

2024年9月17日 作者:Matt Elliott对于使用AMD硬件的系统管理员和高级用户来说,性能优化和高效的资源监控至关重要。AMD系统管理界面命令行工具`amd-smi`正是为了解决这些需求而设计的。amd-smi是一个多功能的命令行工具,专门用于管理和监控AMD硬件,主要侧重于GPU。作为未来取代`rocm-smi`的工具,`amd-smi`有望成为跨广泛设备的AMD硬件管理的主要工具。

数字人生 4520

黑马程序员Java学习日记(10)7k面试题

------- android培训、java培训、期待与您交流! ---------- 黑马程序员Java学习日记(10)7k面试题 1.红绿灯: (1)交通等管理系统的项目需求 模拟实现十字路口的交通灯管理逻辑系统,具体需求如下: 异步随机生成按照各个路线行驶的车辆。 例如:      由南向而来去往北向的车辆---直行车辆      由西向而来去往南向的车辆---右转车辆  

zhanghao_abc的专栏 835

Microchip Studio 7.0 从下载到项目调试:AVR开发者的完整入门指南(附常见问题解决)

本文为AVR开发者提供了Microchip Studio 7.0从下载安装到项目调试的完整入门指南。详细介绍了如何获取安装包、创建第一个AVR工程项目,并配置编译与调试环境。同时,文章重点解决了开发过程中常见的编译错误和仿真问题,帮助开发者快速上手并高效使用这一官方集成开发环境。

joy55的博客 332

黑马程序员-银行业务调度系统的分析、设计、实现

  ------- android培训、java培训、期待与您交流! ---------- 业务和需求分析: 模拟实现银行业务调度系统的逻辑,具体需求如下: 1.银行内有6个业务窗口,1-4号窗口为普通窗口,5号窗口为快速窗口,6号窗口为VIP窗口 2.有三种对应类型的客户:普通客户、快速客户(办理如缴水电费、电话费之类的业务)、VIP客户 3.异步随机生成各种类型的...

黑马程序员-java学习笔记 310

即梦AI使用教程

摘要: 即梦AI是字节跳动推出的多模态AI创作平台,整合图片、视频、智能编辑功能,基于OmniHuman模型支持中英日三语操作。核心特点包括: 技术升级:4.0版本强化中文语义理解与微观表现力,新增故事分镜生成; 创作功能:支持文本/图片转视频、AI对口型、商业级抠图与多图层融合; 用户友好:移动/网页双端适配,灵感社区复用提示词,剪映生态无缝衔接; 应用场景:覆盖电商换装、虚拟主播、设计融合等需求,未来将开放API拓展生态。 (字数:149)

专业深耕,技术前沿 6296

from pointnet2_ops import pointnet2_utils 安装过程

pointnet2_ops

goodgoodstudy___的博客 8362

黑马程序员-交通灯

一、交通灯管理系统的项目需求 模拟实现十字路口的交通灯管理系统逻辑,具体需求如下: 1、异步随机生成按照各个路线行驶的车辆,例如:     由南向而来去往北向的车辆---直行车辆;     由西向而来去往南向的车辆---右行车辆;     由东向而来去往南向的车辆---左行车辆; …… 2、信号灯没有黄灯,只考虑红灯与绿灯。 3、左行车辆、直行车辆被

u010931512的专栏 357

MobaXterm破解14个会话限制的保姆级教程(附Python环境配置指南)

本文提供了MobaXterm破解14个会话限制的详细教程,并深入讲解了如何配置稳定的Python环境以支持相关脚本运行。通过理解软件授权机制、安全实践步骤以及许可文件的应用,帮助用户解除会话数量限制,实现高效的远程服务器管理与自动化运维。

weixin_29211309的博客 1628

黑马程序员——JAVA7K面试题——银行调度系统

-----------android培训、java培训、java学习型技术博客、期待与您交流!------------ 第一讲.概述 通过对张孝祥老师7k面试题视频的学习,边看边敲代码对比之前的交通灯调度系统,对张老师的代码做了一点简化(去掉了单例设计的NumberMachine)银行调度系统的需求如下/** 模拟实现银行业务调度系统逻辑,具体需求如下: 银行内有6个业务窗口,1 -

老七聊AI 745

如何用Hugo Stack主题打造极简技术博客?3个必改配置与5个高级美化技巧

本文详细解析了如何深度定制Hugo Stack主题,打造个性化技术博客。文章提供了3个必改配置与5个高级美化技巧,涵盖字体美学、布局重构、代码块视觉强化及细节打磨,帮助开发者超越基础部署,实现从功能到美学的进阶,提升博客质感与用户体验。

carrot的博客 568

使用 MATLAB/Simulink 构建一个基于PID控制的直流电机速度调节系统模型

直流电机(DC Motor)因其结构简单、成本低廉、易于控制等特点,广泛应用于各种工业自动化和家用电器中。PID控制器作为最常用的控制策略之一,在直流电机的速度调节系统中具有重要应用价值。通过合理调整比例(P)、积分(I)、微分(D)三个参数,可以实现对电机速度的精确控制。本教程将带你使用构建一个基于PID控制的直流电机速度调节系统模型,涵盖电机模型构建、PID控制器设计、系统仿真与调试等多个方面。本文介绍了如何使用构建一个基于PID控制的直流电机速度调节系统模型。

amy_mhd的博客 217

黑马程序员—7k月薪面试题之交通灯管理系统

交通灯管理系统需求: 模拟实现十字路口的交通灯管理系统逻辑,具体需求如下:   Ø  异步随机生成按照各个路线行驶的车辆。 例如:        由南向而来去往北向的车辆---- 直行车辆        由西向而来去往南向的车辆 ---- 右转车辆        由东向而来去往南向的车辆 ---- 左转车辆        。。。   Ø 信号灯忽略黄灯,只考虑红灯和绿灯。

welcome to my blog,thank you! 1015

MTK平台WiFi学习--Wi-Fi 连线/断线问题初步分析

摘要:本文详细介绍了MTK平台WiFi连接问题的日志分析方法。文章首先阐述了WiFi连接的标准流程,包括指令接收、BSSID选择、信道分配、认证关联、四次握手和DHCP获取等关键步骤。针对常见故障场景,如选网失败、信道申请失败、认证关联失败、四次握手失败等,提供了具体的日志分析方法和排查思路,包括识别关键日志、分析状态码、结合固件日志和抓包数据等。文章还特别强调了不同故障场景下需要收集的日志类型和分析要点,为WiFi连接问题的定位提供了一套系统化的解决方案。

专业开发者的博客,一个从事Android WiFi和蓝牙的工程师 1590

黑马程序员_7k面试题之交通灯管理系统

1、项目需求 模拟实现十字路口的交通灯管理系统逻辑,具体需求如下:   异步随机生成按照各个路线行驶的车辆。 例如: 由南向而来去往北向的车辆 ---- 直行车辆 由西向而来去往南向的车辆 ---- 右转车辆 由东向而来去往南向的车辆 ---- 左转车辆 。。。 信号灯忽略黄灯,只考虑红灯和绿灯。 应考虑左转车辆控制信号灯,右转车辆不受信号灯控制。 具体信号灯控制逻辑与现实生

u012573336的专栏 668

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

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

面试题目: 模拟实现十字路口的交通灯管理系统逻辑,具体需求如下: 异步随机生成按照各个路线行驶的车辆。 例如: 由南向而来去往北向的车辆 ---- 直行车辆 由西向而来去往南向的车辆 ---- 右转车辆 由东向而来去往南向的车辆 ---- 左转车辆 。。。 信号灯忽略黄灯,只考虑红灯和绿灯。 应考虑左转车辆控制信号灯,右转车辆不受信号灯控制。 具体信号灯控制

江湖小小生 1315

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

黑马程序员_7K面试题之交通灯管理系统

交通灯管理系统 一、题目要求         模拟实现十字路口的交通灯管理系统逻辑,具体需求如: 1、异步随机生成按照各个路线行驶的车辆。 例如:         由南向而来去往北向的车辆 ----直行车辆         由西向而来去往南向的车辆 ----右转车辆         由东向而来去往南向的车辆 ----左转车辆         。。。

as343542581的专栏 384

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

“黑马程序员”7k面试题之交通灯管理系统

——- android培训、java培训、期待与您交流! ———-  交通灯管理系统 模拟实现十字路口的交通灯管理系统逻辑,具体需求如下:  1. 异常随机生成按照各个路线行驶的车辆。     例如:     由南向而来去往北向的车辆----直行车辆     由西向而来去往南向的车辆----右转车辆     由东向而来去往南向的车辆----左转车辆   

Silly_child的博客 573

【黑马程序员】Java7K面试题20:交通灯管理系统

------- android培训、java培训、期待与您交流!---------- 一、交通灯管理系统 模拟实现十字路口的交通灯管理系统逻辑,具体需求如下: 1、异步随机生成按照各个路线行驶的车辆; 例如: 由南向而来去往北向的车辆---- 直行车辆 由西向而来去往南向的车辆---- 右转车辆 由东向而来去往南向的车辆---- 左转车辆 …… 2、信号灯忽略

lepor 1051

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

-------------------------ASP.Net+Unity开发、.Net培训、期待与您交流!-------------------------- 交通灯系统需求 模拟实现十字路口的交通灯管理系统逻辑,具体需求如下: 异步随机生成按照各个路线行驶的车辆。 例如:        由南向而来去往北向的车辆 ---- 直行车辆        由西向而来去往南向的车辆 --

Android--我的选择 584

黑马程序员_7K面试题_交通灯管理系统

一,面向对象在分析         面向对象的一个重要经验:谁拥有数据,谁就对外提供操作这些数据的方法。 比如:人在黑板上画圆,其实并不是人在画,而是黑板在画圆,人调用了黑板的画圆的方法,其实真正在画圆的是黑板,黑板拥有圆对象,所以黑板应该提供画的方法。人关门也是一样,我们只是调用了门的关的方法,其实还是门自己关上的。包括列车司机刹车,售票员售票等等。 1,面向对

黑马程序员_ord 826

黑马程序员——7K面试题: 交通灯管理系统

黑马程序员——7K面试题:   交通灯管理系统 ------- android培训、java培训、期待与您交流! ----------  面试题内容: 模拟实现十字路口的交通灯管理系统逻辑,具体需求如下: 1、异步随机生成按照各个路线行驶的车辆; 例如: 由南向而来去往北向的车辆 ---- 直行车辆        由西向而来去往南向的车辆 ---- 右转车辆        由东向而

生命缘迹的专栏 1041

黑马程序员—7K月薪面试题破解--交通灯管理系统

------http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训、期待与您交流! ------- 1、交通灯管理系统的业务和需求分析 交通灯管理系统的项目需求: 模拟实现十字路口的交通灯管理系统逻辑,具体需求如下: 1、异步随机生成按照各个线路行驶的车辆 例如:      由

yuanqiwyj的专栏 502

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

需求分析 模拟实现十字路口的交通灯管理系统逻辑,具体需求如下:  异步随机生成按照各个路线行驶的车辆。 例如:        由南向而来去往北向的车辆 ---- 直行车辆        由西向而来去往南向的车辆 ---- 右转车辆        由东向而来去往南向的车辆 ---- 左转车辆        。。。  信号灯忽略黄灯,只考虑红灯和绿灯。 

jwx555的专栏 508

黑马程序员_7K面试题:十字路口的交通灯管理系统

模拟实现十字路口的交通灯管理系统逻辑,具体需求如下:  异步随机生成按照各个路线行驶的车辆。 例如:        由南向而来去往北向的车辆 ---- 直行车辆        由西向而来去往南向的车辆 ---- 右转车辆        由东向而来去往南向的车辆 ---- 左转车辆 信号灯忽略黄灯,只考虑红灯和绿灯。 应考虑左转车辆控制信号灯,右转车辆不受信号灯控制。 具体信号

awangk2的专栏 911

黑马程序员-7K月薪面试题破解之一_交通灯管理系统

---------------------- ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ---------------------- 项目需求:模拟实现十字路口的交通灯管理系统逻辑,具体需求如下 异步随机生成按照各个路线行驶的车辆。 例如:由南向而来去往北向的车辆------直行车辆    由西向而来去往南向的车辆------右转车辆    由东向而来

hy100100的专栏 728
上一篇: 黑马程序员-7k面试题之银行调度系统
LinsCode
博客等级 码龄13年 2粉丝 12原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值