`

ava交通灯管理项目

 
阅读更多

java交通灯管理项目


交通灯管理需求:
模拟实现十字路口的交通灯管理系统逻辑,具体需求如下:
• 异步随机生成按照各个路线行驶的车辆。
例如:
由南向而来去往北向的车辆---- 直行车辆
由西向而来去往南向的车辆---- 右转车辆
由东向而来去往南向的车辆---- 左转车辆
。。。
• 信号灯忽略黄灯,只考虑红灯和绿灯。
• 应考虑左转车辆控制信号灯,右转车辆不受信号灯控制。
• 具体信号灯控制逻辑与现实生活中普通交通灯控制逻辑相同,不考虑特殊情况下的控制逻辑。
注:南北向车辆与东西向车辆交替放行,同方向等待车辆应先放行直行车辆而后放行左转车辆。
• 每辆车通过路口时间为1秒(提示:可通过线程Sleep的方式模拟)。
• 随机生成车辆时间间隔以及红绿灯交换时间间隔自定,可以设置。
• 不要求实现GUI,只考虑系统逻辑实现,可通过Log方式展现程序运行结果。


需求分析:




主要是面向对象的分析,分析一共有多少个对象.谁占有资源谁就提供方法.张老师还在其中讲了不少面向对象的分析,很实用.
首先需要有路: Road


package com.isoftstone.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;

/**
 * 每个Road对象代表一条路线,总共有12条路线,即系统中总共要产生12个Road实例对象。
 * 每条路线上随机增加新的车辆,增加到一个集合中保存。
 * 每条路线每隔一秒都会检查控制本路线的灯是否为绿,是则将本路线保存车的集合中的第一辆车移除,即表示车穿过了路口。
 * @author 张孝祥 www.it315.org
 *
 */
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);//1-9秒内不断的增加车辆
					} 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 !");//输出车辆里面包含了路线名称和i变量;
							}
						}
						
					}
				},
				1,
				1,
				TimeUnit.SECONDS);
		
	}
}
//利用12个方向的路线来判定该路灯是否为亮,如果灯亮那么就输出,否则就继续增加车辆并等待(线程继续循环)。


交通灯枚举类Lamp

package com.isoftstone.interview.traffic;

/**
 * 每个Lamp元素代表一个方向上的灯,总共有12个方向,所有总共有12个Lamp元素。
 * 有如下一些方向上的灯,每两个形成一组,一组灯同时变绿或变红,所以,
 * 程序代码只需要控制每组灯中的一个灯即可:
 * s2n,n2s    
 * s2w,n2e
 * e2w,w2e
 * e2s,w2n
 * s2e,n2w
 * e2n,w2s
 * 上面最后两行的灯是虚拟的,由于从南向东和从西向北、以及它们的对应方向不受红绿灯的控制,
 * 所以,可以假想它们总是绿灯。
 * @author 张孝祥 www.it315.org
 *
 */
/**/

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(name() + " lamp is green,下面总共应该有6个方向能看到汽车穿过!");
		
	}
	
	/**
	 * 某个灯变红时,对应方向的灯也要变红,并且下一个方向的灯要变绿
	 * @return 下一个要变绿的灯
	 */	
	public Lamp blackOut(){
		this.lighted = false;
		if(opposite != null){
			Lamp.valueOf(opposite).blackOut();
		}		
		
		Lamp nextLamp= null;
		if(next != null){
			nextLamp = Lamp.valueOf(next);
			System.out.println("绿灯从" + name() + "-------->切换为" + next);			
			nextLamp.light();
		}
		return nextLamp;
	}
}


控制器类LampController

package com.isoftstone.interview.traffic;
public class MainClass {
public static void main(String[] args) {
//产生12个方向的路线
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();
}
}



利用控制器类来生成12条路。然后将车放入其中,再调用start方法。
分享到:
评论

相关推荐

    ava实战项目--个人资产管理系统

    在本项目"Java实战项目--个人资产管理系统"中,我们主要关注的是利用Java技术栈构建一个客户端/服务器(C/S)架构的应用程序,用于管理个人财务和资产。这个系统提供了登录、注册以及搜索查询等核心功能,旨在帮助...

    基于ava后台资金管理系统设计与实现.docx

    基于AVA后台资金管理系统设计与实现 本文档对基于AVA后台资金管理系统的设计与实现进行了详细的介绍。该系统基于BS架构模式开发,采用Java开发,MySQL作为数据库,旨在为广大民众提供后台资金管理服务。该系统的...

    ava窗体学生管理系统.

    Java窗体学生管理系统是一款基于Java编程语言开发的桌面应用程序,旨在提供一个简洁、直观的界面,用于管理和操作学生的信息。这个系统通常会包含一系列功能,如添加学生信息、查询学生信息、修改信息以及删除学生...

    AVA体验服启动文件夹

    本文将详细介绍如何使用和管理这个"AVA体验服启动文件夹",以便让玩家能够顺利地在体验服中畅玩游戏。 首先,我们要明白“AVA体验服启动文件夹”是游戏客户端的一部分,它包含了运行体验服所需的一系列核心文件和...

    ava_v2.2.zip

    《AVA v2.2:深度学习中的动作识别与数据集详解》 在人工智能领域,特别是计算机视觉和机器学习,动作识别是一项重要的研究课题。而AVA(A Video Dataset for Human Action Recognition)v2.2,是由Google Research...

    ava.json测试标签数据80种类

    AVA数据集json标签文件ava.json测试标签数据80种类,google研究AVA人类行为数据集的标签文件

    java物资管理系统项目源码

    ava物资管理系统项目是一种基于Java语言开发的软件系统,用于帮助企业或组织管理和跟踪物资的采购和消耗。该系统具有多种功能,包括物资采购管理、库存管理、物资申领审批等,旨在提高物资管理的效率和准确性。 ...

    AVA:极其新潮的测试执行器.zip

    这篇内容将深入探讨AVA的特性、使用方法以及如何将其集成到您的项目中。 **1. 什么是AVA?** AVA,全称Asynchronous Value-Asserting,是由Sindre Sorhus创建的一个开源项目,主要目标是提供一个现代化的...

    中庆与AVA对比表

    中庆与AVA对比表中庆与AVA对比表中庆与AVA对比表中庆与AVA对比表中庆与AVA对比表

    avaEE平台租房网项目实战WebService

    - **Maven或Gradle**:构建工具,用于管理项目依赖,自动化构建过程。 - **HTML/CSS/JavaScript**:前端页面的构建基础,用于创建用户友好的界面。 - **Ajax**:用于实现页面的异步更新,提高用户体验。 - **JSTL/EL...

    AVA数据集下载链接.rar

    《AVA数据集:深入探索人类动作理解》 AVA(Action Genome)数据集是谷歌公司推出的一个庞大而精细的视频数据库,旨在推动计算机视觉领域中人类行为的理解与分析。这一数据集的发布,对于人工智能,尤其是视频理解...

    虹光ava5扫描仪驱动程序

    虹光ava5扫描仪驱动程序是一款可以有效解决虹光ava5扫描仪在使用过程中出现的一些问题的驱动工具,本站提供了虹光ava5扫描仪驱动下载地址,有需要的朋友们就来下载使用吧。 虹光ava5是一款平板式扫描仪,采用的是...

    Java编辑器学习版本ava编辑器学习版本ava编辑器学习版本ava编辑器学习版本

    ava编辑器学习版本ava编辑器学习版本ava编辑器学习版本ava编辑器学习版本ava编辑器学习版本

    行业教育软件-学习软件-ava编程自学软件 官方版.zip

    软件集成了详尽的教程资源、实例解析、实战项目以及互动式练习,打造了一站式的ava学习环境。 首先,该软件提供的ava基础教程涵盖了语法基础、数据类型、控制结构、类与对象等核心概念,让初学者能够系统地了解ava...

    Ava_Find硬盘搜索

    **Ava_Find硬盘搜索工具详解** Ava_Find是一款高效实用的硬盘搜索软件,专为用户设计,用于快速、精准地在计算机硬盘上查找所需的文件或数据。它的主要功能是帮助用户在海量的文件中迅速定位目标,从而提高工作效率...

    Ryujinx.Ava.exe

    Ryujinx.Ava.exe

    J2SE项目_雇员管理系统_源码

    【标题】"J2SE项目_雇员管理系统_源码" 涉及的主要知识点是Java SE(Java标准版)的编程技术,尤其是构建一个基于Java的雇员管理系统。这样的项目通常涵盖了许多基础到进阶的Java编程概念,是初学者巩固理论知识并...

    AVA美学质量评价数据集下载链接.txt

    图像美学质量评价数据集AVA下载链接,可用迅雷下载!文件30G左右较大,建议在网速良好的状态下下载。

    Ava Find Professional 1.5

    Ava Find Professional 1.5 一个用来搜索本地硬盘文件的工具。专业版。

    电子商务专业的课程设计AVA课程设计

    10. **项目管理和版本控制**:运用项目管理工具如Git进行版本控制,协同团队成员共同开发。 通过这个课程设计,学生不仅会掌握Java编程技能,还会了解到电子商务系统的运作原理,以及如何利用技术提高电商平台的...

Global site tag (gtag.js) - Google Analytics