黑马程序员-7K月薪面试题破解之一_交通灯管理系统
2014-01-22 20:32
471 查看
---------------------- ASP.Net+Android+IOS开发、.Net培训、期待与您交流!
----------------------
项目需求:模拟实现十字路口的交通灯管理系统逻辑,具体需求如下
异步随机生成按照各个路线行驶的车辆。
例如:由南向而来去往北向的车辆------直行车辆
由西向而来去往南向的车辆------右转车辆
由东向而来去往南向的车辆------左转车辆
如图:
信号灯忽略黄灯,只考虑红灯和绿灯。
应考虑左转车辆控制信号灯,右转车辆不受信号灯控制。
注:南北向车辆与东西向车辆交替放行,同方向等待车辆应先放行直行车辆而后放行左转车辆。每辆车通过路口时间为1秒(提示:可通过现场Sleep的方式模拟)。随机生成车辆时间间隔以及红绿灯交换时间间隔自定,可以设置。不要求实效GUI,只考虑系统逻辑实现,可通过Log方式展现程序运行结果。
Road类的编写:
Lamp类的编写:
Main类的编写:
面试技巧:不害怕,要坚强!
---------------------- ASP.Net+Android+IOS开发、.Net培训、期待与您交流!
----------------------详细请查看:http://edu.csdn.net
----------------------
项目需求:模拟实现十字路口的交通灯管理系统逻辑,具体需求如下
异步随机生成按照各个路线行驶的车辆。
例如:由南向而来去往北向的车辆------直行车辆
由西向而来去往南向的车辆------右转车辆
由东向而来去往南向的车辆------左转车辆
如图:
信号灯忽略黄灯,只考虑红灯和绿灯。
应考虑左转车辆控制信号灯,右转车辆不受信号灯控制。
注:南北向车辆与东西向车辆交替放行,同方向等待车辆应先放行直行车辆而后放行左转车辆。每辆车通过路口时间为1秒(提示:可通过现场Sleep的方式模拟)。随机生成车辆时间间隔以及红绿灯交换时间间隔自定,可以设置。不要求实效GUI,只考虑系统逻辑实现,可通过Log方式展现程序运行结果。
Road类的编写:
package org.it315.interview.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 { private List<String> vechicles = new ArrayList<String>(); private String name = null; //定义路线的名字 public Road(String name){ this.name = name; ExecutorService pool = Executors.newSingleThreadExecutor(); pool.execute(new Runnable(){ public void run(){ for(int i = 1; i < 1000; i++){ try{ Thread.sleep((new Random().nextInt(10)+1)*1000); }catch(InterruptedException e){ e.printStackTrace(); } vechicles.add(Road.this.name + " " + i); } } }); ScheduledExecutorService timer = Executors.newScheduledThreadPool(1); timer.scheduleAtFixedRate( new Runnable(){ public void run(){ if(vechicles.size()>0){ boolean lighted = Lamp.valueOf(Road.this.name).isLighted(); if(lighted){ System.out.println(vechicles.remove(0)+"is traversing !"); } } } }, 1, 1, TimeUnit.SECONDS); } }
Lamp类的编写:
package org.it315.interview.traffic; 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 Lamp(){ } 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(name()+" lamp is green,下面总共应该有6个方向能看到汽车穿过!"); } public Lamp blackOut(){ this.lighted = false; if(opposite != null){ Lamp.valueOf(opposite).blackOut(); } Lamp nextLamp = null; if(next != null){ nextLamp = Lamp.valueOf(next); nextLamp.light(); System.out.println("绿灯"+ name() + "----------->切换为"+next ); } return nextLamp; } }LampController类的编写:
package org.it315.interview.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.light(); ScheduledExecutorService timer = Executors.newScheduledThreadPool(1); timer.scheduleAtFixedRate( new Runnable(){ public void run(){ currentLamp=currentLamp.blackOut(); } }, 10, 10, TimeUnit.SECONDS); } }
Main类的编写:
package org.it315.interview.traffic; public class MainClass { /** * @param args */ public static void main(String[] args) { // TODO Auto-generated method stub String[] directions = new String[]{ "S2N","S2W","E2W","E2S","N2S","N2E","W2E","W2N","S2E","E2N","N2W","W2S" }; for(int i=0;i<directions.length;i++){ new Road(directions[i]); } new LampController(); } }
面试技巧:不害怕,要坚强!
---------------------- ASP.Net+Android+IOS开发、.Net培训、期待与您交流!
----------------------详细请查看:http://edu.csdn.net
相关文章推荐
- <黑马程序员>月薪7K面试题破解-交通灯管理系统
- 黑马程序员_7K月薪面试题破解之一_交通灯管理系统
- 黑马程序员-----张孝祥-7K月薪面试题破解之一_交通灯管理系统视频教程观后总结
- 黑马程序员 7K月薪面试题破解之一 -- 交通灯管理系统
- 黑马程序员—7K月薪面试题破解--交通灯管理系统
- 黑马程序员-张孝祥-7K月薪面试题破解之一_交通灯管理系统
- 黑马程序员----7k月薪面试题破解(交通灯管理系统)
- 黑马程序员-7K月薪面试题破解之一_交通灯管理系统
- 黑马程序员—Java基础学习笔记之7K月薪面试题破解_交通灯管理系统
- 奋斗黑马程序员----7k月薪面试题之交通灯管理系统
- 黑马程序员_张孝祥_7K月薪面试题_交通灯管理系统
- 黑马程序员-7K面试题破解(交通灯管理系统)
- 黑马程序员------7k月薪面试题-交通灯管理系统
- 黑马程序员-----JAVA 7K月薪面试题:交通灯管理系统
- 黑马程序员--十五、7K月薪面试题-- 交通灯管理系统
- 黑马程序员—7k月薪面试题之交通灯管理系统
- 黑马程序员 7K面试题破解:交通灯管理系统
- 张孝祥-7K月薪面试题破解之一: 交通灯管理系统
- 黑马程序员_7K月薪面试题交通灯管理系统
- 黑马程序员——JAVA7K面试题——交通灯管理系统