Java——交通灯
/*
* 交通灯管理系统的 项目需求:
* 模拟实现: 十字路口的交通灯系统逻辑, 具体需求如下:
*
异步随机生成按照各个路线行驶的车辆。
*
信号灯忽略黄灯。 只考虑红灯和绿灯。
*
应考虑在左转车辆控制 信号灯, 右转车辆不受信号灯控制。
*
具体信号灯控制与生活中普通交通逻辑相同,不考虑特殊情况下的逻辑。
*
每辆车通过路口时间为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——交通灯的更多相关文章
- java交通灯管理系统项目
交通灯管理系统 模拟实现十字路口的交通灯管理系统逻辑,具体需求如下: 异步随机生成按照各个路线行驶的车辆. 例如: 由南向而来去往北向的车辆 ---- 直行车辆 由西向而来去往南向的车辆 ---- ...
- Java交通灯系统
交通灯管理项目模拟了对十字路口交通灯的控制,一般在我们生活中的十字路口是有人行道的,而此项目没有考虑人行道.具体需求如下: 1.异步随机生成按照各个路线行驶的车辆. 例如: ...
- 黑马程序员——【Java高新技术】——案例:交通灯管理系统
---------- android培训.java培训.期待与您交流! ---------- 一.交通灯管理系统的项目需求 Ø 异步随机生成按照各个路线行驶的车辆 例如: 由南向而来去往北向的车辆 - ...
- 黑马程序员:Java编程_7K面试题之交通灯管理系统
=========== ASP.Net+Android+IOS开发..Net培训.期待与您交流!=========== 模拟实现十字路口的交通灯管理系统逻辑,具体需求如下: 异步随机生成按照各个路线行 ...
- java 7K交通灯管理系统面试题
交通灯管理系统 模拟实现十字路口的交通灯管理系统逻辑.详细需求例如以下: 1. 异常随机生成依照各个路线行驶的车辆. 比如: 由南向而来去往北向的车辆----直行车辆 由西向而来去往 ...
- Java基础---Java---面试题---交通灯管理系统(面向对象、枚举)
交通灯管理系统的项目需求: 模拟实现十字路口的交通灯管理系统逻辑,具体需求如下: 1.异步随机生成按照各个路线行驶的车辆 例如: 由南向而来去往北向的车辆-----直行车辆 由西向而来去往南 ...
- Java高级——交通灯管理系统
本方法模拟了现实生活中的交通信号灯的情况 1.先构建Road类,此类可以创建12个方向的路 代码如下: package com.springtie.traffic; import java.util. ...
- java 面试题之交通灯管理系统
需求: 交通灯管理系统的项目需求 Ø 异步随机生成按照各个路线行驶的车辆. 例如: 由南向而来去往北向的车辆 ---- 直行车辆 由西向而来去往南向的车辆 ---- 右转车辆 由东向而来去往南向的车辆 ...
- 黑马程序员_JAVA之交通灯管理系统
------Java培训.Android培训.iOS培训..Net培训.期待与您交流! ------- 1.一.需求:模拟实现十字路口的交通灯管理系统逻辑,具体需求如下: 1.异步随机生成按照各个路 ...
随机推荐
- dialog参数、方法以及事件
参数(options) DOM方式初始化dialog的,推荐使用集合属性data-options定义参数,如果使用data属性定义参数,注意转换成对应的名称. 名称 类型 默认值 描述 id stri ...
- HTML5实战教程———开发一个简单漂亮的登录页面
最近看过几个基于HTML5开发的移动应用,比如臭名昭著的12036移动客户端就是主要使用HTML5来实现的,虽然还是有点反应迟钝,但已经比较流畅了,相信随着智能手机的配置越来越高性能越来越好,会越来越 ...
- 最新的goldengate monitor 12.1.3已经发布
Oracle GoldenGate管理包针对OGG提供企业级的监控和管理,包含有如下模块: Oracle Enterprise Manager Plug-in. 利用OEM框架查看.管理和预警OGG ...
- C#基础--面向对象计算器
static void Main(string[] args) { //new个对象 Calculator cal = new Calculator(); //做事情 cal.Run(); } /// ...
- 使用copy来拷贝对象
拷贝对象 您通过将 copy 消息发送给对象,以制作对象的副本. NSArray *myArray = [yourArray copy]; 要拷贝,接收对象的类必须遵守 NSCopying 协议.如果 ...
- PHP中目录的操作
文件的操作:创建文件,删除文件,重命名文件rename(),移动/复制文件,读取,大小(PHP都有内置的函数) 目录的操作:创建目录(有),删除目录,复制目录,统计目录大小,遍历(自己定义函数) 一. ...
- Makefile总结和反序字符数组,整体右移数组,杨辉三角!
2015.1.23今天我值日 继续接着昨天Makefile的目标开始记录:第一种:有 .PHNOY声明,但是冒号后面没有依赖文件.PHNOY:clean clean://没有依赖文件 rm *.0 t ...
- mysql的ERROR:1042
在虚拟机上测试数据库备份功能,需要连接外部机器上的mysql,pdo总是报超时错误! 起初认为是用的mysql账号的域不匹配!后来发现不是因为这个! 在终端中用mysql命令尝试连接,发现返回的错误是 ...
- C#里partial关键字的作用(转摘)
C#里partial关键字的作用(转摘) 1. 什么是局部类型? C# 2.0 引入了局部类型的概念.局部类型允许我们将一个类.结构或接口分成几个部分,分别实现在几个不同的.cs文件中. 局部类型适用 ...
- Selenium - IWebDriver.SwitchTo() frame 和 Window 的用法
IWebDriver.SwitchTo().Frame(IWebElement frame) 如果一个页面是一个html元素, 只有一个head, 一个body, 那么使用IWebDriver.Fin ...