黑马程序员-交通灯管理系统
2012-06-09 12:39
369 查看
---------------------- android培训、java培训、期待与您交流! ----------------------
交通灯管理系统:
根据需求画图分析:
1.
总共的路线为12条,除去每个方向向右拐的路线,同时通车的路线为相反方向的两条,这样就将路线分为4组,对这四组路线的交通灯进行控制即可。
2.
因为灯的方向和数量是固定的,所以用一个枚举类来表示它。因项目需求不需要抽象车的对象。将路线和车结合,每条路线中装有车。
3.
写一个交通灯的控制类,对四组灯进行控制。
实现灯的枚举类:
package org.cc.trafficlight;
//使用枚举类模拟交通灯
public enum Lamp {
S2N("S2W", "N2S", false), S2W("E2W", "N2E", false), E2W("E2S", "W2E", false), E2S(
"S2N", "W2N", 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 boolean lighted;
private String next;
private String opposite;
private Lamp() {
}
private Lamp(String next, String opposite, boolean lighted) {
this.next = next;
this.opposite = opposite;
this.lighted = lighted;
}
public boolean isLight() {
return this.lighted;
}
public void light() {// 使交通灯变绿
this.lighted = true;
System.out.println(this.name() + "...可通行");
if (this.opposite != null) {
Lamp.valueOf(this.opposite).lighted = true;
System.out.println(this.opposite + "...可通行");
}
}
public Lamp dark() {// 使交通灯变红并返回下一个灯
this.lighted = false;
if (this.opposite != null) {
Lamp.valueOf(this.opposite).lighted = false;
}
Lamp nextLamp = null;
if (this.next != null) {
nextLamp = Lamp.valueOf(this.next);
}
return nextLamp;
}
}
实现灯控制类:
package org.cc.trafficlight;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
//交通灯控制系统
public class LampControl {
private Lamp current;
public LampControl() {// 初始化
this.current = Lamp.S2N;
current.light();
ScheduledExecutorService time = Executors.newScheduledThreadPool(1);// 设置定时器10改变一次交通灯
time.scheduleWithFixedDelay(new Runnable() {
public void run() {
current = current.dark();
current.light();
}
}, 10, 10, TimeUnit.SECONDS);
}
}
实现路线的类:
package org.cc.trafficlight;
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 Load {
private ArrayList<String> road = new ArrayList<String>();
private String name;
public Load(String name) {
this.name = name;
ExecutorService pool = Executors.newSingleThreadExecutor();// 产生装有一个线程的线程池
pool.execute(new Runnable() {// 1-10秒随机产生一辆车加入到路线中
public void run() {
try {
Thread.sleep((new Random().nextInt(10) + 1) * 1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
for (int i = 1; i < 1000; i++) {
road.add(Load.this.name + "_" + i);
}
}
});
ScheduledExecutorService time = Executors.newScheduledThreadPool(1);// 设置定时器
time.scheduleWithFixedDelay(new Runnable() {// 每秒中查看该路线的交通灯情况,绿灯就将集合中的第一辆车删除
public void run() {
if (road.size() > 0) {
Lamp lamp = Lamp.valueOf(Load.this.name);
if (lamp.isLight()) {
System.out.println(road.remove(0)
+ "...is traversing!!!");
}
}
}
}, 1, 1, TimeUnit.SECONDS);
}
}
测试类:
package org.cc.trafficlight;
public class MainClass {
public static void main(String[] args) {
String[] str = { "S2N", "S2W", "E2W", "E2S", "N2S", "N2E", "W2E",
"W2N", "S2E", "E2N", "N2W", "W2S" };
for (int i = 0; i < str.length; i++) {
new Load(str[i]);
}
new LampControl();
}
}
---------------------- android培训、java培训、期待与您交流! ----------------------
详细请查看:http://edu.csdn.net/heima
交通灯管理系统:
根据需求画图分析:
1.
总共的路线为12条,除去每个方向向右拐的路线,同时通车的路线为相反方向的两条,这样就将路线分为4组,对这四组路线的交通灯进行控制即可。
2.
因为灯的方向和数量是固定的,所以用一个枚举类来表示它。因项目需求不需要抽象车的对象。将路线和车结合,每条路线中装有车。
3.
写一个交通灯的控制类,对四组灯进行控制。
实现灯的枚举类:
package org.cc.trafficlight;
//使用枚举类模拟交通灯
public enum Lamp {
S2N("S2W", "N2S", false), S2W("E2W", "N2E", false), E2W("E2S", "W2E", false), E2S(
"S2N", "W2N", 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 boolean lighted;
private String next;
private String opposite;
private Lamp() {
}
private Lamp(String next, String opposite, boolean lighted) {
this.next = next;
this.opposite = opposite;
this.lighted = lighted;
}
public boolean isLight() {
return this.lighted;
}
public void light() {// 使交通灯变绿
this.lighted = true;
System.out.println(this.name() + "...可通行");
if (this.opposite != null) {
Lamp.valueOf(this.opposite).lighted = true;
System.out.println(this.opposite + "...可通行");
}
}
public Lamp dark() {// 使交通灯变红并返回下一个灯
this.lighted = false;
if (this.opposite != null) {
Lamp.valueOf(this.opposite).lighted = false;
}
Lamp nextLamp = null;
if (this.next != null) {
nextLamp = Lamp.valueOf(this.next);
}
return nextLamp;
}
}
实现灯控制类:
package org.cc.trafficlight;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
//交通灯控制系统
public class LampControl {
private Lamp current;
public LampControl() {// 初始化
this.current = Lamp.S2N;
current.light();
ScheduledExecutorService time = Executors.newScheduledThreadPool(1);// 设置定时器10改变一次交通灯
time.scheduleWithFixedDelay(new Runnable() {
public void run() {
current = current.dark();
current.light();
}
}, 10, 10, TimeUnit.SECONDS);
}
}
实现路线的类:
package org.cc.trafficlight;
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 Load {
private ArrayList<String> road = new ArrayList<String>();
private String name;
public Load(String name) {
this.name = name;
ExecutorService pool = Executors.newSingleThreadExecutor();// 产生装有一个线程的线程池
pool.execute(new Runnable() {// 1-10秒随机产生一辆车加入到路线中
public void run() {
try {
Thread.sleep((new Random().nextInt(10) + 1) * 1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
for (int i = 1; i < 1000; i++) {
road.add(Load.this.name + "_" + i);
}
}
});
ScheduledExecutorService time = Executors.newScheduledThreadPool(1);// 设置定时器
time.scheduleWithFixedDelay(new Runnable() {// 每秒中查看该路线的交通灯情况,绿灯就将集合中的第一辆车删除
public void run() {
if (road.size() > 0) {
Lamp lamp = Lamp.valueOf(Load.this.name);
if (lamp.isLight()) {
System.out.println(road.remove(0)
+ "...is traversing!!!");
}
}
}
}, 1, 1, TimeUnit.SECONDS);
}
}
测试类:
package org.cc.trafficlight;
public class MainClass {
public static void main(String[] args) {
String[] str = { "S2N", "S2W", "E2W", "E2S", "N2S", "N2E", "W2E",
"W2N", "S2E", "E2N", "N2W", "W2S" };
for (int i = 0; i < str.length; i++) {
new Load(str[i]);
}
new LampControl();
}
}
---------------------- android培训、java培训、期待与您交流! ----------------------
详细请查看:http://edu.csdn.net/heima
相关文章推荐
- 黑马程序员7k面试题:交通灯管理系统
- 黑马程序员交通灯管理系统学习日记
- 黑马程序员——交通路灯管理系统
- 黑马程序员--交通灯管理系统详细分析及实现
- 黑马程序员--交通灯管理系统
- 黑马程序员————交通灯管理系统(第九篇)
- 黑马程序员_交通灯管理系统
- 黑马程序员------交通灯管理系统
- 黑马程序员----------java7K面试题之交通灯管理系统
- 黑马程序员_交通灯管理系统
- 黑马程序员--Java 7K面试题之交通灯管理系统
- 黑马程序员-交通灯管理系统
- 黑马程序员——交通灯管理系统
- 黑马程序员_交通灯管理系统
- 黑马程序员_交通灯管理系统学习总结
- 黑马程序员学习log第十一篇7K面试题一:交通灯管理系统总结
- 黑马程序员——交通灯管理系统
- 黑马程序员高级视频学习笔记交通等管理系统
- 黑马程序员21——交通灯管理系统
- 黑马程序员_交通灯管理系统