------- android培训、java培训、期待与您交流! ----------

今天看了张老师的这个面试题讲解才感觉到自己在一个什么水平,继续努力学习,还需不断提升自己的能力!

继续学习巩固一些知识,对线程池的认识以及对定时器的熟练掌握。各个知识点融会贯通才能成为一名优秀的程序员。

交通信号灯题目及要求

1.异步随机生成按照各个路线行驶的车辆。

例如:

由南向而来去往北向的车辆 ---- 直行车辆

由西向而来去往南向的车辆 ---- 右转车辆

由东向而来去往南向的车辆 ---- 左转车辆

。。。

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

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

4.具体信号灯控制逻辑与现实生活中普通交通灯控制逻辑相同,不考虑特殊情况下的控制逻辑。

注:南北向车辆与东西向车辆交替放行,同方向等待车辆应先放行直行车辆而后放行左转车辆。

5. 每辆车通过路口时间为1秒(提示:可通过线程Sleep的方式模拟)。

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

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

画图分析:

分析对象,原则:谁拥有数据,谁就对外提供操作这些数据的方法。

路对象:

通过线程时间随机地产生汽车并存入集合众,跟据交通信号灯的变化移除汽车。

灯对象:

图中共有12条路线 , 就可以看作为12个固定的交通灯 ,由于每次都是在操作同一对象, 所以运用用Enum枚举类就更加方便。,
由于向右拐弯是不受灯控制的 , 所以4条右转弯的灯一直为绿(true) ,  在剩下的8条路线中 , 路线是两两对应的  , S2N-N2S , S2W-N2E ,W2E-E2W , E2S-W2N , 并且第一组灯变红(false)时 , 第二组灯就变绿(true) , 依次往复 , 这样就明确的灯的对应和交替关系 。

信号灯控制器:

添加定时器,控制红绿灯变化。

路的代码:

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 {private List<String> vehicles = new ArrayList<String>();   //创建集合,用来存放产生的汽车String roadName = null;Road(String roadName){   //路的构造方法this.roadName = roadName;  ExecutorService pool = Executors.newSingleThreadExecutor();   //学习Executors类,创建独立线程。Java1.5         pool.execute(new Runnable(){    //匿名内部类@Overridepublic void run() {for(int i=1; i<1000; i++){try {Thread.sleep((new Random().nextInt(10)+1)*1000);  //} catch (InterruptedException e) {e.printStackTrace();}//把车放进集合中vehicles.add(Road.this.roadName+"_"+i);     //外部类的局部变量的访问方式:外部类名.this.变量名              }}});ScheduledExecutorService timer = Executors.newScheduledThreadPool(1);  //定义一个计划的线程池,线程的数量为1//创建并执行此线程池,初始可以定时、并且后续具有周期性的方法.//用于当交通灯为绿色时,移出当前路上的车辆timer.scheduleAtFixedRate(new Runnable(){@Overridepublic void run() {if(vehicles.size()!=0){                           boolean lighted = Lamp.valueOf(Road.this.roadName).isLighted();if(lighted){System.out.println(vehicles.remove(0)+" is traversing");}}}                  },1,1,TimeUnit.SECONDS);}
}

信号灯:

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 Lamp(String opposite,String next,boolean lighted){this.opposite = opposite;this.next = next;this.lighted = lighted;}private boolean lighted;private String opposite;private String next;public boolean isLighted(){   //判断灯的状态return lighted;}//灯变绿方法public void light(){this.lighted = true;if(opposite != null){Lamp.valueOf(opposite).light();}System.out.println(this.name()+"lamp is green");}//灯变红方法public Lamp lightOff(){this.lighted = false;if(opposite != null){Lamp.valueOf(opposite).lightOff();}System.out.println(next);Lamp nextLamp = null;if(next != null){System.out.println("绿灯由"+name()+"变成"+next);        nextLamp = Lamp.valueOf(next);//System.out.println("test");nextLamp.light();}return nextLamp;}
}

信号灯控制器:

public class LampController {private Lamp currentLamp = null;public LampController(){currentLamp = Lamp.S2N;  //定义初始变绿方向的灯currentLamp.lightOn();ScheduledExecutorService timer = Executors.newScheduledThreadPool(1);   //添加定时器,根据实际逻辑红绿灯不断交替timer.scheduleAtFixedRate(new Runnable(){public void run(){currentLamp = currentLamp.lightOff();  //lightOff返回下一个当前状态等}},10, 10,TimeUnit.SECONDS);}
}

编写住方法实现功能:

public class MainClass {public static void main(String[] args) {String[] roadNames = new String[]{"S2N","S2W","E2W","E2S","N2S","N2E","W2E","W2N","S2E","E2N","N2W","W2S"};for(String roadName : roadNames){new Road(roadName);}new LampController();}
}

张老师面试题讲解——交通信号灯相关推荐

  1. (埋葬那些在网上把简单问题复杂化专业化把垃圾答案胡乱贴的懵懂派)一道月薪3W的java面试题 (小明和小强都是张老师的学生,张老师的生日是某月某日,2人都不知道张老师的生日)

    关注微信公众号:wwwcoder,现在已将博客搬到这里,内容精选过后才发布出来.谢谢大家支持 小明和小强都是张老师的学生,张老师的生日是M月N日,2人都知道张老师的生日 是下列10组中的一天,张老师把 ...

  2. 如何用TF Object Detection API训练交通信号灯检测神经网络?

    参加 2019 Python开发者日,请扫码咨询 ↑↑↑ 作者简介:申泽邦(Adam Shan),谷歌认证机器学习专家(Google Developer Expert),兰州大学智能驾驶团队技术负责人 ...

  3. java模拟交通信号灯_java 多线程交通信号灯模拟过程详解

    这学期我们java课程的课程设计项目----交通信号灯的线程设计 实验目的:多线程设计,同步机制 题意 设计一个交通信号灯类: 变量:位置.颜色(红.黄.绿).显示时间(秒). 方法:切换信号灯. 创 ...

  4. 打印循环换行_科学向日葵在线课堂 ——张老师讲Python 第八课 周而复始为循环2...

    点击蓝字关注我们 张老师讲编程--和爸爸妈妈一起学Python Python 的编辑器有很多,例如 PyCharm.Spyder.Notepad++等等,大家根据需要选择一个就好,初期程序代码量不大, ...

  5. linux 多线程的基础 交通信号灯学习笔记 :信号详解

    (以下均为<linux/UNIX 系统编程手册>中的部分笔记分享,和整理) 如果想要掌握多线程的编程方法,掌握信号量的学习尤为重要 首先第一点 ,还是对基础语义部分的理解,什么是信号: 信 ...

  6. 30道经典SQL面试题讲解(11-20)

    本篇节选自书籍<对比Excel,轻松学习SQL数据分析>一书,主要讲解数据分析面试中常见的30道SQL面试题.1-10题见:30道经典SQL面试题讲解(1-10) 11 行列互换 现在我们 ...

  7. verilog语言实现FPGA板的交通信号灯

    数字电子技术课程设计报告 设计题目: 交通信号灯 目录 一.概述 二.任务书(任务功能介绍) 三.系统设计 1.基本原理 2.系统设计框图 四.各单元设计(Verilog源代码及仿真图) 五.总体电路 ...

  8. 基于51单片机十字路口交通信号灯(启动按键+绿灯同亮报警)

    基于51单片机十字路口交通信号灯(启动按键+绿灯同亮报警) 仿真:proteus 7.8 程序编译器:keil 4/keil 5 编程语言:C语言 设计编号:J013 目录标题 基于51单片机十字路口 ...

  9. 红绿灯(交通信号灯)检测数据集

    深度学习目标检测:红绿灯(交通信号灯)检测数据集 目录 深度学习目标检测:红绿灯(交通信号灯)检测数据集 1.红绿灯数据集说明 (1)Traffic-Lights-Dataset-Domestic ( ...

  10. 计算机中专综合知识,湖南省汨罗市职业中专高考(八)计算机应用专业综合知识试题讲解.doc...

    湖南省汨罗市职业中专高考(八)计算机应用专业综合知识试题讲解 湖南省汨罗市职业中专2014届高考 计算机应用类专业综合知识试题(八) 一.单项选择题(在每小题的四个备选答案中选出一个正确答案,并将正确 ...

最新文章

  1. eclipse.ini内存设置
  2. 微生物所高程-郭良栋组(内附招聘)在菌根适应策略研究中取得进展
  3. 观看自由!B站上线斯坦福最新「机器学习系统(MLSys)」全集
  4. 一起谈.NET技术,C# 中奇妙的函数之ToLookup
  5. 做“是非题”的正确姿势
  6. IDEA去除mapper.xml文件中的sql语句的背景色
  7. linux 中用PPA安装软件
  8. [洛谷P1369]矩形
  9. linux计划任务与日志管理(日志分割/切割)
  10. android单例模式代码,设计模式(一):Android 源码中的单例模式
  11. QT操作word表格——垂直居中、水平居中
  12. 01-Lambert 漫反射
  13. Python基础-不要对实例属性和类属性使用相同的名字
  14. 中国丁二磺酸腺苷蛋氨酸SAMe市场投资发展分析与未来前景展望报告2022-2028年
  15. 钟景华:相关规范或明年发布,大型和超大型数据中心PUE小于1.3/WUE小于1.6
  16. 对stm32程序(HEX)的读取和烧录(使用JLink和JFlash)
  17. (数学实验)Matlab实现猜数小游戏(增加了错误输入的判断)
  18. Ubuntu添加/删除PPA源
  19. call、ret、retf 指令详解
  20. 我喜欢c语言英语,英语作文我喜欢的诗人.doc

热门文章

  1. 魔戒显示网络错误 或者服务器停机,指环王安装和运行过程中的常见问题及解决办法(汇总)...
  2. 猜一猜,我国第一次大规模应用二维码是什么时候?
  3. phpStudy2018中Apache启动失败
  4. YouTube Java API入门
  5. 网页加载过程+性能优化+安全
  6. java 判断是否夏令时_Java日期夏令时的问题
  7. MOSS系列一 MOSS的安装
  8. 第106章 Caché 函数大全 $ZF(-4),$ZF(-5),$ZF(-6) 函数
  9. 接口测试+自动化接口测试详解入门到精通
  10. Xray安全评估工具使用