`
manwuyuantao
  • 浏览: 8083 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

Java编程语言-交通灯管理系统

 
阅读更多

 

6.交通灯系统分析

l面向对象的知识点:

面向对象设计把握一个重要的经验:谁拥有数据,谁就对外提供操作这些数据的方法。

 

l系统分析:

1,十字路口的线路分析,共有12条线路。分别为:"S2N","S2W","E2W","E2S","N2S","N2E","W2E","W2N","S2E","E2N","N2W","W2S";所以12条线路对应着12个灯,那么灯就可以看成一个对象,并且可以使用枚举类完成,灯的操作有变红,变绿和判断灯的状态。12个灯中有四个灯是右拐弯的所以只需常绿即可,剩下的8个灯都是两两对应的,所以主灯只需4个,其余4个让其与主灯的状态一一对应即可。另外在灯变红时还需要一将下一个灯变绿。

2,路和车两个对象,因考虑到车可以使用字符串来代替所以只需路一个对象。因路上的车需要增减的操作所以考虑可以使用集合来代表路。在路的对象中需要接收路线名,并且需要随机向路上添加车辆的操作和通过接收到的路线名来获取当前路线上的灯并每一秒判断当前路线上的灯的状态来让集合中的第一辆车通过。

3,因为灯需要进行管理,所以可以创建一个灯管理系统对象。类中需要对灯初始化一个开始灯(即设置一个灯为绿灯)并记录为当前灯,设置每格10秒对当前灯进行变红的操作(所以这里就需要在灯的类中对下一个灯变绿操作时返回这个变绿的灯)。

 

l具体代码实现:

//灯类

publicenum Lamp {

//四个主灯对象,构造时传递自身的状态,自己对面的灯和下一个灯

S2N(false,"N2S","S2W"),S2W(false,"N2E","E2W"),E2W(false,"W2E","E2S"),E2S(false,"W2N","S2N"),

//四个对面的灯,因主灯控制了所以这些对面的灯就不需要传递对面和下一个灯

N2S(false,null,null),N2E(false,null,null),W2E(false,null,null),W2N(false,null,null),

//四个右拐弯的灯需要一直绿,所以初始时传递状态为true

S2E(true,null,null),E2N(true,null,null),N2W(true,null,null),W2S(true,null,null);

 

//构造函数接收三个参数:灯的状态,对面灯名,下一个灯名

private Lamp(boolean lighted,String opposite,String next){

this.lighted = lighted;

this.opposite = opposite;

this.next = next;

}

privatebooleanlighted;

private Stringopposite;

private Stringnext;

 

//判断灯的状态

publicboolean isLighted(){

returnlighted;

}

//点亮绿灯并且把对面相同路线的灯变绿

publicvoid lightGreen(){

lighted =true;

if(opposite != null){

Lamp.valueOf(opposite).lightGreen();

}

}

//点亮红灯并且把对面相同路线的灯变红,同时把自己下一个灯变绿

public Lamp lightRed(){

lighted =false;

if(opposite != null){

Lamp.valueOf(opposite).lightRed();

}

Lamp nextLamp = null;

if(next != null){

nextLamp = Lamp.valueOf(next);

nextLamp.lightGreen();

}

return nextLamp;

}

}

 

//灯管理系统

publicclass LampController {

private LampcurrentLamp;

public LampController(){

currentLamp = Lamp.S2N;

currentLamp.lightGreen();

ScheduledExecutorServicetimer = Executors.newScheduledThreadPool(1);

timer.scheduleAtFixedRate(

new Runnable(){

publicvoid run(){

currentLamp =currentLamp.lightRed();

}

},

10,

10,

TimeUnit.SECONDS);

}

}

//路类

publicclass Road {

//定义一个集合作为路线

List<String>vecnicles =new ArrayList<String>();

private Stringname =null;

public Road(String name){

this.name = name;

//利用线程随机的向路上添加车辆

ExecutorService add= Executors.newCachedThreadPool();

add.execute(new Runnable(){

@Override

publicvoid run() {

for(int x=0; x<1000; x++){

try {

Thread.sleep((new Random().nextInt(10) + 1) * 1000);

} catch (Exception e) {

e.printStackTrace();

}

//将路线名加编号作为车辆添加到路线上

vecnicles.add(Road.this.name + "_" + x);

}

}

});

//利用线程定时器将符合的车辆从路上移除

ScheduledExecutorService timer = Executors.newScheduledThreadPool(1);

timer.scheduleAtFixedRate(

new Runnable(){

publicvoid run(){

if(vecnicles.size()>0){

//获取当面路线上的路的状态

boolean ligthed = Lamp.valueOf(Road.this.name).isLighted();

if(ligthed){

//如果当前路线上的灯为绿灯则第一辆车通过

System.out.println(vecnicles.remove(0)+"车正在通过...");

}

}

}

},

1,

1,

TimeUnit.SECONDS);

}

}

 

总结:

通过这个题目了解到了面向对象的真正意思,不是之前所说的那么简单,很多描述起来还是跟现实中的一些理解相“矛盾”的,能过老师讲解的几个例子,对面向对象还是有了进一步的了理解:“面向对象设计把握一个重要的经验:谁拥有数据,谁就对外提供操作这些数据的方法。”这句话我必须理解和深深的记住它。通过这个题目还对线程池和线程的定时器有了进一步的学习和掌握,这些我感觉还是比较简单的,更重要的我认为是线程并发库那块的知识是重点,所以我还需要抽出时间去多学习并发库的知识。另外对自己提出点要求:就是基础部分必须还要再去巩固。因为在看老师的高新技术和这个面试例子时感觉自己有些基础知识还是掌握的不是很牢固,所以还得加强、巩固!为自己加油!

虽然我爱的人离我而去,但是我必须要坚持下去,必须让她看到我的努力不是白费的!!!

 

 

分享到:
评论

相关推荐

    java毕业设计&课设-交通灯管理系统(视频+源码+资料).zip

    Java毕业设计与课程设计——交通灯管理系统是一个典型的软件开发项目,旨在帮助学生理解和掌握实际的编程技能、系统设计以及项目管理。在这个项目中,学生将使用Java编程语言来实现一个模拟城市交通灯控制的系统。这...

    java毕业设计&课设-交通灯管理系统(视频+源码+资料).doc

    本项目为一款基于Java语言实现的交通灯管理系统,旨在通过模拟实际交通路口中的红绿灯控制逻辑,来帮助学生理解并掌握面向对象编程的基本原理以及如何在实际场景中应用Java技术进行系统开发。 #### 二、项目背景与...

    java课设--交通信号灯

    在本项目“java课设--交通信号灯”中,我们主要关注的是利用Java编程语言实现一个交通信号灯控制系统。这个控制系统不仅包括基本的信号灯切换逻辑,还增加了动态显示路线和开始界面的功能,以增强用户体验和项目的...

    java交通灯管理系统源码和文档

    总之,通过研究"java交通灯管理系统源码和文档",你可以深入了解Java编程语言,学习面向对象设计,以及如何在实际项目中运用这些知识。这是一个极好的实践平台,能帮助你从理论走向实践,提升编程技能。

    JAVA项目:交通灯管理系统视频教程.rar

    交通灯管理系统是一个典型的Java应用程序示例,用于模拟和控制城市交叉路口的交通信号灯运作。在本教程中,你将学习如何使用Java编程语言来设计和实现这样一个系统,以提高城市交通的效率和安全性。这个视频教程可能...

    JAVA交通灯指挥系统

    **JAVA交通灯指挥系统**是基于Java编程语言开发的一个实用示例,它融合了图数据结构、观察者模式以及策略模式等核心概念。这个系统旨在模拟真实的交通灯控制逻辑,帮助初学者理解如何在实际项目中应用这些重要的编程...

    交通灯管理系统——JAVA

    交通灯管理系统是一个基于JAVA...总而言之,交通灯管理系统是JAVA技术在物联网和智能交通领域的具体应用,它结合了软件工程、网络通信、数据处理和安全防护等多个方面的知识,展示了JAVA语言的强大功能和广泛应用前景。

    交通路灯管理系统

    【交通路灯管理系统】是一个基于JAVA语言的虚拟交通管理软件,主要功能是模拟并管理城市中的交通信号灯系统。这个系统采用多线程技术,确保了各个路口的交通信号灯能够独立、同步地运行,从而有效地控制交通流量,...

    java项目交通灯管理系统

    根据提供的文件信息,我们可以推断出这是一个关于Java项目的交通灯管理系统的案例。下面将围绕这个项目的几个关键方面进行深入解析。 ### 一、项目概述 交通灯管理系统是一种典型的基于计算机技术实现的城市交通...

    交通灯管理系统视频教程_源代码与PPT

    《交通灯管理系统视频教程_源代码与PPT》是由传智播客的知名讲师张孝祥主讲的一门课程,旨在帮助程序员们理解和掌握交通灯管理系统的开发技术,特别是针对那些正在寻求7K月薪职位的面试者。这门课程不仅包含视频教程...

    交通灯管理系统源代码和ppt

    完整的交通灯管理系统源代码和ppt,本人受用很大,对面向对象编程的理解有很大帮助,适合学习java开发的人员,相信对大多数人也有帮助

    Java开发的交通管理系统

    Java作为一种跨平台的编程语言,以其强大的面向对象特性和丰富的类库,成为开发交通管理系统的首选语言。交通管理系统主要负责实时收集、处理、分析交通数据,提供决策支持,优化交通流量,预防拥堵,提升道路安全。...

    交通灯管理系统--源代码与PPT.rar

    《交通灯管理系统--源代码与PPT》是一个涵盖了交通灯管理系统的全面开发资源包,它不仅提供了源代码,还有一份对应的PPT讲解,对于学习SSM(Spring、SpringMVC、MyBatis)框架的课程设计或毕业设计来说,是极具价值...

    交通灯管理系统源代码.zip

    总的来说,《交通灯管理系统源代码》项目能够帮助学习者深入理解Java编程、多线程操作、逻辑控制以及软件设计原则。通过实现这个系统,不仅能提高编程技能,还能锻炼解决问题的能力,对于软件开发者的成长具有重要...

    JAVA实现交通灯

    本文将深入探讨如何使用Java语言来实现一个简单的交通灯控制系统。交通灯系统是城市交通流的关键组成部分,它通过红绿黄三色灯的交替变化来协调车辆和行人的通行。 首先,我们需要理解交通灯的基本工作原理。...

    五星路口交通灯控制系统(Java版)

    【五星路口交通灯控制系统(Java版)】是一个基于Java编程语言实现的交通灯控制系统,专为模拟和管理复杂的交叉路口交通流而设计。这个系统利用Java的面向对象特性,为每个交通灯方向创建独立的对象,以实现灵活的...

    交通灯管理系统

    【交通灯管理系统】是一种自动化控制交通路口红绿灯运行的软件系统,旨在提高道路交通效率,保障行人和车辆的安全。在城市交通管理中扮演着至关重要的角色。本项目可能包含源码和相关工具,帮助开发者理解和实现这样...

    一个模拟交通灯的JAVA源代码.rar

    在本项目中,我们关注的是一个使用Java编程语言实现的交通灯模拟程序。交通灯控制系统是城市交通管理的重要组成部分,它有效地协调车辆和行人的流动,确保道路安全。这个Java源代码提供了一个基础的交通灯模型,适用...

    模拟交通灯java

    在本文中,我们将深入探讨如何使用Java编程语言来模拟一个行人过马路的按钮式红绿灯系统。这个系统包括了交通灯的周期性变化、行人请求过马路的机制以及信号灯的状态管理。让我们一起深入了解这一过程。 首先,我们...

    java 图形界面交通灯

    Java Swing 是Java编程语言中用于构建图形用户界面(GUI)的一个工具包,它是Java Foundation Classes (JFC)的一部分。在本项目"Java Swing 图形界面 交通灯"中,我们将探讨如何利用Java Swing来设计一个模拟交通灯...

Global site tag (gtag.js) - Google Analytics