`
bingzhen66
  • 浏览: 36198 次
文章分类
社区版块
存档分类
最新评论

65.黑马程序员-交通灯管理系统

 
阅读更多

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

一、需求

二、画图演示
三、分析
  • 大体过程:线路随机增加车,且本线路灯为绿,车通行。所以关键对象就是线路和灯。
  • 线路:
    • 线路的作用是:产生车辆、判断灯、移除车辆。
    • 数量:共12条,12个线路对象。
    • 每条线路随机增加新车辆,装入集合
    • 线路每秒检查灯,是绿灯,头一辆车通过,移出集合。
    • package com.isoftstone.interview.traffic;
      
      import java.util.List;
      import java.util.ArrayList;
      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>();
      	private String name =null;
      	public Road( String name)
      	{
      		this.name = name;
      		//下面开启一个线程,功能是:1-10秒出现一辆车,接着添加进集合。
      		ExecutorService pool = Executors.newSingleThreadExecutor();
      		pool.execute(new Runnable(){
      
      			@Override
      			public void run()
      			{
      				// TODO Auto-generated method stub
      				for (int i = 0; i < 1000; i++)
      				{
      					try
      					{
      						Thread.sleep((new Random().nextInt(10)+1)*1000);
      						
      					} catch (InterruptedException e)
      					{
      						// TODO Auto-generated catch block
      						e.printStackTrace();
      					}					
      					vehicles.add(Road.this.name+"_"+i);//访问外部类的成员变量:外部类名.this.变量名	
      					
      				}
      			}
      			
      		});
      		//下面定义一个调度线程,固定频率,移除集合中的首辆车,返回:路名+编号
      		ScheduledExecutorService timer= Executors.newScheduledThreadPool(1);
      		timer.scheduleAtFixedRate(
      				new Runnable(){
      
      					@Override
      					public void run()
      					{
      						
      						// TODO Auto-generated method stub
      						//Lamp lamp = Lamp.valueOf(direction);
      						if(vehicles.size()>0)
      						{
      							//这条路上的灯是否是亮的。
      							boolean lighted = Lamp.valueOf(Road.this.name).isLighted();				
      			
      							if (lighted)//有车,绿灯,则通行
      							{
      								
      								System.out.println(vehicles.remove(0)+"is traversing!");
      							}
      						}														
      					}}, 
      				1, 
      				1, 
      				TimeUnit.SECONDS
      				);
      		
      	}
      	
      }

  • 灯:
    • 灯的作用是:当前状态、变红、变绿。
    • 数量:12个灯,
      • 有4个(右转)是长亮的。
      • 其他8条是成对存在的,灯的颜色变化相同。
      • 综上,不同的只有4组灯。只要控制好这四组灯即可。
    • 控制: 怎么控制四组灯,依次轮转变亮呢?
      • 自己与对面的灯一块变化,需要一个变量记住。
      • 记住自己后面的灯,也需要一个变量。尾巴记住首位组成一个循环。
      • 由于灯的实例每个方向只有一个,用枚举可以带来很大的方便,永远都只有代表12个方向的灯的实例对象。
    • package com.isoftstone.interview.traffic;
      
      public enum Lamp
      {	//只有第一行四个灯是重要的,南向上、向左。东向上、向左。只要控制好这四个灯的循环,所有灯就被控制了。
      	//第一行第一个参数给String,可以转成Lamp。直接Lamp类型不行,因为作为参数的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;//灯的状态,true为红,false为暗
      	private String opposite;//对面的灯。类型为String可以恢复为Lamp,
      	private String next;//下一个灯。
      	
      	public boolean isLighted() //灯是否亮?
      	{
      		return lighted;
      	}
      	public void light()//变绿方法
      	{
      		this.lighted = true;
      		if(opposite != null)//对面的灯为null,不能有对应的灯接着回来找我了,不让会死循环
      		{
      			Lamp.valueOf(opposite).light();//对面也跟着变绿			
      		}
      		System.out.println(name()+"lamp is green,下面共应该有6个方向能看到汽车通过!");
      		
      	}
      	public Lamp blackOut()//变红方法。
      	{
      		this.lighted = false;
      		if(opposite != null)//对面的灯为null,不能有对应的灯接着回来找我了,不让会死循环
      		{
      			Lamp.valueOf(opposite).blackOut();//对面也跟着变红		
      		}
      		//当前灯灭,则把下一个灯变亮作为当前灯,返回。
      		//Lamp nextLamp = Lamp.valueOf(next);
      		Lamp nextLamp = null;
      		if(next != null)
      		{
      			nextLamp = Lamp.valueOf(next);
      			//Lamp.valueOf(next).light();
      			System.out.println("绿灯从"+name()+"---->切换为"+next);
      			nextLamp.light();
      		}
      		return nextLamp;
      	}
      }
      

  • 灯控制器类
    • 这个类主要是控制灯的颜色变化。
    • 每过10秒钟就改变当前灯的颜色,灯的变红方法应该返回下一个灯,接着下一个灯作为当前灯。
    • 定时让当前的绿灯变红。
    • package com.isoftstone.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()
      	{
      		//初始化灯并且为绿(亮light)
      		currentLamp = Lamp.S2N;
      		currentLamp.light();
      		
      		//建一个定时器,每过一段时间,让当前的灯变红,下一个灯变绿。
      		ScheduledExecutorService timer = Executors.newScheduledThreadPool(1);
      		timer.scheduleAtFixedRate(
      				new Runnable(){
      					public void run()
      					{
      						//当前灯变红,返回值为下一个灯,下一个灯作为当前的灯。
      						System.out.println("来啊");
      						currentLamp = currentLamp.blackOut();						
      					}}, 
      				10, 
      				10, 
      				TimeUnit.SECONDS);
      		
      		
      
      		
      		
      	}
      }
      

  • MainClass
    • main()所在。
    • 创建12条路线。
    • 创建灯控制器对象,定时器可以放在构造函数,对象建立任务执行。
    • package com.isoftstone.interview.traffic;
      
      public class MainClass
      {
      
      	/**
      	 * @param args
      	 */
      	public static void main(String[] args)
      	{
      		//创建12条路线对象,和1个控制器。
      /*		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);*/
      		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();
      	}
      
      }
      

分享到:
评论

相关推荐

    黑马程序员----交通灯系统注意点归纳

    NULL 博文链接:https://840198532-qq-com.iteye.com/blog/1492498

    数电课程设计---交通灯定时控制系统的设计、制作.docx

    数电课程设计---交通灯定时控制系统的设计、制作.docx数电课程设计---交通灯定时控制系统的设计、制作.docx数电课程设计---交通灯定时控制系统的设计、制作.docx数电课程设计---交通灯定时控制系统的设计、制作.docx...

    作业-交通灯.zip作业-交通灯.zip

    作业-交通灯.zip

    单片机课程设计报告-交通灯控制系统设计.docx

    单片机课程设计报告-交通灯控制系统设计.docx单片机课程设计报告-交通灯控制系统设计.docx单片机课程设计报告-交通灯控制系统设计.docx单片机课程设计报告-交通灯控制系统设计.docx单片机课程设计报告-交通灯控制...

    单片机课程设计报告-交通灯控制系统设计.pdf

    单片机课程设计报告-交通灯控制系统设计.pdf单片机课程设计报告-交通灯控制系统设计.pdf单片机课程设计报告-交通灯控制系统设计.pdf单片机课程设计报告-交通灯控制系统设计.pdf单片机课程设计报告-交通灯控制系统...

    单片机原理及应用-交通灯控制系统设计.pdf

    单片机原理及应用-交通灯控制系统设计.pdf单片机原理及应用-交通灯控制系统设计.pdf单片机原理及应用-交通灯控制系统设计.pdf单片机原理及应用-交通灯控制系统设计.pdf单片机原理及应用-交通灯控制系统设计.pdf...

    at89c51单片机-交通灯控制系统(含源码及仿真图)大全.pdf

    at89c51单片机-交通灯控制系统(含源码及仿真图)大全.pdfat89c51单片机-交通灯控制系统(含源码及仿真图)大全.pdfat89c51单片机-交通灯控制系统(含源码及仿真图)大全.pdfat89c51单片机-交通灯控制系统(含源码及仿真图)...

    数字逻辑-交通灯系统设计(HUST) 1-12关 头歌

    数字逻辑---交通灯系统设计(HUST) 1-12关 头歌 【一个代码可通12关】 1.7段数码管驱动电路设计 2.4位无符号比较器设计 3.8位无符号比较器设计 4.1位2路选择器设计 5.8位2路选择器设计 6.双向BCD计数器状态机设计 7....

    《微机原理与接口技术》课程设计--交通灯系统设计.pdf

    《微机原理与接口技术》课程设计--交通灯系统设计.pdf《微机原理与接口技术》课程设计--交通灯系统设计.pdf《微机原理与接口技术》课程设计--交通灯系统设计.pdf《微机原理与接口技术》课程设计--交通灯系统设计.pdf...

    数字逻辑--交通灯系统设计实训.txt

    数字逻辑--交通灯系统设计实训.txt

    单片机课程设计--交通灯控制系统.pdf

    单片机课程设计--交通灯控制系统.pdf单片机课程设计--交通灯控制系统.pdf单片机课程设计--交通灯控制系统.pdf单片机课程设计--交通灯控制系统.pdf单片机课程设计--交通灯控制系统.pdf单片机课程设计--交通灯控制系统...

    单片机课程设计--交通灯控制系统.docx

    单片机课程设计--交通灯控制系统.docx单片机课程设计--交通灯控制系统.docx单片机课程设计--交通灯控制系统.docx单片机课程设计--交通灯控制系统.docx单片机课程设计--交通灯控制系统.docx单片机课程设计--交通灯...

    电路CAD课程设计--交通信号灯控制系统.pdf

    电路CAD课程设计--交通信号灯控制系统.pdf电路CAD课程设计--交通信号灯控制系统.pdf电路CAD课程设计--交通信号灯控制系统.pdf电路CAD课程设计--交通信号灯控制系统.pdf电路CAD课程设计--交通信号灯控制系统.pdf电路...

    基于-51单片机控制交通灯课程设计报告.pdf

    基于-51单片机控制交通灯课程设计报告.pdf基于-51单片机控制交通灯课程设计报告.pdf基于-51单片机控制交通灯课程设计报告.pdf基于-51单片机控制交通灯课程设计报告.pdf基于-51单片机控制交通灯课程设计报告.pdf基于-...

    基于-51单片机控制交通灯课程设计报告.docx

    基于-51单片机控制交通灯课程设计报告.docx基于-51单片机控制交通灯课程设计报告.docx基于-51单片机控制交通灯课程设计报告.docx基于-51单片机控制交通灯课程设计报告.docx基于-51单片机控制交通灯课程设计报告.docx...

    嵌入式系统开发与应用-交通灯系统实训

    嵌入式系统开发与应用--交通灯系统实训

    华南理工大学-单片机课程设计说明书完整版-交通灯控制.docx

    华南理工大学-单片机课程设计说明书完整版-交通灯控制.docx华南理工大学-单片机课程设计说明书完整版-交通灯控制.docx华南理工大学-单片机课程设计说明书完整版-交通灯控制.docx华南理工大学-单片机课程设计说明书...

    深度学习-交通灯数据集.rar

    深度学习--交通灯数据集深度学习--交通灯数据集深度学习--交通灯数据集深度学习--交通灯数据集深度学习--交通灯数据集深度学习--交通灯数据集深度学习--交通灯数据集深度学习--交通灯数据集深度学习--交通灯数据集...

    单片机课程设计--交通信号灯实时控制系统设计.pdf

    单片机课程设计--交通信号灯实时控制系统设计.pdf单片机课程设计--交通信号灯实时控制系统设计.pdf单片机课程设计--交通信号灯实时控制系统设计.pdf单片机课程设计--交通信号灯实时控制系统设计.pdf单片机课程设计--...

Global site tag (gtag.js) - Google Analytics