/*

* 交通灯管理系统的 项目需求:

* 模拟实现:  十字路口的交通灯系统逻辑,  具体需求如下:


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


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


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


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


每辆车通过路口时间为1秒,  (可以通过线程sleep模拟)


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


不要求实现 GUI 只考虑  系统里  逻辑实现  可通过 log方式  程序运行结果。

* 分析:


先考虑  其中出现的对象


灯。。(共有  12种  走向   ;  每一种走向 都要  用一个灯)


路。。


控制系统。。

*/

public class 交通灯管理的项目

{

public static void main(String[] args)

{

String[] Roads = new String[]{

"S2N", "S2W", "E2W", "E2S", "N2S", "N2E", "W2E", "W2N", "S2E", "E2N", "N2W", "W2S"};

for(int i=0; i<Roads.length; i++)

{

new Road(Roads[i]);

}

new LampController();

}

}

-----------------------------------控制灯的对象--------------------------------

public class LampController

{

private Lamp currentLamp;//当前  的灯

public LampController()

{

currentLamp = Lamp.S2N;//赋值  当前的灯    是 从南——> 北

currentLamp.light();//让当前的灯 变绿

/*

* 制作一个定时器    每个10秒  就去  变红 当前的灯   然后 更换当前的灯

*/

ScheduledExecutorService timer = Executors.newScheduledThreadPool(1);//线程池

timer.scheduleAtFixedRate(

new Runnable()

{

@Override

public void run()

{

// TODO Auto-generated method stub

currentLamp = currentLamp.blackOut();//将  当前的灯  变成  红色

}

},

10,

10,

TimeUnit.SECONDS);

}

}

-------------------------------------------------------灯------------------------------------------------

/*

*    灯  对象

* 分别   12个  走法    每个  走向 都有一个交通灯

*/

public enum Lamp

{

//12个  走向     对应12个   交通灯  (**单一 对应**)

S2N("N2S", "S2W", false), S2W("N2E", "E2W", false), E2W("W2E", "E2S", false), E2S("W2N", "N2S", 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 Lamp blackOut()

{

//把当前灯 变红    并且把 对面的 灯也要变红

this.lighted = false;

if(opposite != null)

{

Lamp.valueOf(opposite).blackOut();//把对面的  灯 变红

System.out.println("-----当前灯--- "+this.opposite+"----**变成   红灯了*****");

}

Lamp nextLamp = null;//Lamp.valueOf(next);

//把下一个   要通行的  路线 上的 灯  变绿

if(next != null)

{

nextLamp = Lamp.valueOf(next);

System.out.println("oooooo---"+this.next+"-----变成   绿灯oooooo");

nextLamp.light();

}

return nextLamp;

}

//让 灯 变  绿   (可以 通过)

public void light()

{

this.lighted = true;

//吧对应的   对面的灯  也变绿

if(opposite != null)

{

Lamp.valueOf(opposite).light();

}

System.out.println(this.lighted + "   灯亮了  ----   下边  总共有 6  个方向上的 灯 亮了   ");

}

}

-----------------------------------------------路-----------------------------------

/*

* 路 对象


中有 好多车

*/

public class Road

{

//每条路  都有自己的名字

private String name;

//初始化时   就有自己的名字    并且在这条路上  会随机  产生 1000辆车。。

public Road(String name)

{

this.name = name;

//创建一个使用单个 worker 线程的 Executor,以无界队列方式来运行该线程。

ExecutorService pool = Executors.newSingleThreadExecutor();

pool.execute(

new Runnable()

{

@Override

public void run()

{

// TODO Auto-generated method stub

for(int i=1; i<1000; i++)

{

try

{

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

}

catch (InterruptedException e)

{

// TODO Auto-generated catch block

e.printStackTrace();

}

car.add(Road.this.name+"_"+i);//往  路上 添加车辆

}

}

});

//获取一个定时器://参数: 池中所保存的线程数,即使线程是空闲的也包括在内。

//创建一个线程池,它可安排在给定延迟后运行命令或者定期地执行。

ScheduledExecutorService timer = Executors.newScheduledThreadPool(1);

//scheduleAtFixedRate(Runnable command, long initialDelay, long period, TimeUnit unit)

//创建并执行一个在给定初始延迟后首次启用的定期操作,后续操作具有给定的周期;也就是将在 initialDelay 后开始执行,然后在

//initialDelay+period 后执行,接着在 initialDelay + 2 * period 后执行,依此类推。

timer.scheduleAtFixedRate(

new Runnable()

{

@Override

public void run()

{

// TODO Auto-generated method stub

//把集合中的  车 给移走。

if(car.size()>0)

{

//内部类  调用  外部类  属性  用 类名.this.属性

boolean lighted = Lamp.valueOf(Road.this.name).isLighted();//判断   交通灯是否   为绿灯。。

if(lighted)

{

System.out.println(car.remove(0)+"  被移除!!!");

}

}

}

},

1,

1,

TimeUnit.SECONDS);

}

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

}

版权声明:本文为博主原创文章,未经博主允许不得转载。

Java——交通灯的更多相关文章

  1. java交通灯管理系统项目

    交通灯管理系统   模拟实现十字路口的交通灯管理系统逻辑,具体需求如下: 异步随机生成按照各个路线行驶的车辆. 例如: 由南向而来去往北向的车辆 ---- 直行车辆 由西向而来去往南向的车辆 ---- ...

  2. Java交通灯系统

    交通灯管理项目模拟了对十字路口交通灯的控制,一般在我们生活中的十字路口是有人行道的,而此项目没有考虑人行道.具体需求如下:  1.异步随机生成按照各个路线行驶的车辆.          例如:     ...

  3. 黑马程序员——【Java高新技术】——案例:交通灯管理系统

    ---------- android培训.java培训.期待与您交流! ---------- 一.交通灯管理系统的项目需求 Ø 异步随机生成按照各个路线行驶的车辆 例如: 由南向而来去往北向的车辆 - ...

  4. 黑马程序员:Java编程_7K面试题之交通灯管理系统

    =========== ASP.Net+Android+IOS开发..Net培训.期待与您交流!=========== 模拟实现十字路口的交通灯管理系统逻辑,具体需求如下: 异步随机生成按照各个路线行 ...

  5. java 7K交通灯管理系统面试题

    交通灯管理系统 模拟实现十字路口的交通灯管理系统逻辑.详细需求例如以下: 1. 异常随机生成依照各个路线行驶的车辆.    比如:    由南向而来去往北向的车辆----直行车辆    由西向而来去往 ...

  6. Java基础---Java---面试题---交通灯管理系统(面向对象、枚举)

    交通灯管理系统的项目需求: 模拟实现十字路口的交通灯管理系统逻辑,具体需求如下: 1.异步随机生成按照各个路线行驶的车辆  例如:   由南向而来去往北向的车辆-----直行车辆   由西向而来去往南 ...

  7. Java高级——交通灯管理系统

    本方法模拟了现实生活中的交通信号灯的情况 1.先构建Road类,此类可以创建12个方向的路 代码如下: package com.springtie.traffic; import java.util. ...

  8. java 面试题之交通灯管理系统

    需求: 交通灯管理系统的项目需求 Ø 异步随机生成按照各个路线行驶的车辆. 例如: 由南向而来去往北向的车辆 ---- 直行车辆 由西向而来去往南向的车辆 ---- 右转车辆 由东向而来去往南向的车辆 ...

  9. 黑马程序员_JAVA之交通灯管理系统

    ------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 1.一.需求:模拟实现十字路口的交通灯管理系统逻辑,具体需求如下:  1.异步随机生成按照各个路 ...

随机推荐

  1. Tomcat的安装(一)

    一.Tomcat文件下载类型 1.tar.gz 文件是linux的安装包 2.exe文件是Windows系统的安装包 3.zip文件是Windows系统下压缩版(解压缩即可,免安装) 二.下面使用zi ...

  2. HTML--11marquee标签

    页面的自动滚动效果,可由javascript来实现, 但是有一个html标签 - <marquee></marquee>可以实现多种滚动效果,无需js控制. 使用marquee ...

  3. 2013年8月份第3周51Aspx源码发布详情

    BaiduMusic Cache源码  2013-8-23 [VS2012]功能介绍:可以读取并保存百度音乐(Win8应用程序商店版本)的缓存.可以检测电脑是否安装了百度音乐,支持缓存音乐的导出功能. ...

  4. http请求利器: 今天配置出了RESTClient,用MAVEN构建了UI运行包

  5. 如何调用super

    因此,决定是否调用 super,基于您打算如何重新实施方法: 如果打算补充超类实现的行为,请调用 super. 如果打算替换超类实现的行为,就不要调用 super. 如果您要补充超类行为,另一个需要重 ...

  6. vijos 1907 飞扬的小鸟

    我心里毫无波动甚至还有点想笑. WTF WTF WTF WTF WTF WTF WTF GTMD调了一天什么鬼啊. 原来更新的范围有讲究啊. #include<iostream> #inc ...

  7. Python OpenCV ——Matplotlib显示图片

    Color image loaded by OpenCV is in BGR mode.But Matplotlib displays in RGB mode.So color images will ...

  8. iOS App 转移

    此文章只是为了记录一个Apple ID下的APP,转移到另外一个Apple ID 账户下.为了说的清楚下面用A账户(有App,要转出去)B账户(接收A账户App,接收者),来说明. 1.      登 ...

  9. 表视图控制器(TableViewController)(二)

    1 tableView的编辑模式 1.1 问题 表视图可以进入编辑模式,当进入编辑模式就可以进行删除.插入.移动单元等操作,本案例还是使用联系人界面学习如何进入编辑模式,以及进入编辑模式之后的删除.插 ...

  10. 编程之美2.5:寻找最大的K个数

    编程之美2.5:寻找最大的K个数 引申:寻找第k大的数: 方法一: // 选择第k大的数(通过改进快速排序来实现) public static void SelectShort(int[] array ...