现在的位置: 首页 > 综合 > 正文

黑马程序员_交通灯管理系统

2013年10月06日 ⁄ 综合 ⁄ 共 2715字 ⁄ 字号 评论关闭

---------------------- android培训java培训、期待与您交流! ----------------------

交通灯管理系统

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

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

例如:

       由南向而来去往北向的车辆 ---- 直行车辆

       由西向而来去往南向的车辆 ---- 右转车辆

       由东向而来去往南向的车辆 ---- 左转车辆

       。。。

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

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

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

注:南北向车辆与东西向车辆交替放行,同方向等待车辆应先放行直行车辆而后放行左转车辆。

Ø 每辆车通过路口时间为1秒(提示:可通过线程Sleep的方式模拟)。

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

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

答案:根据张孝祥老师的讲解,自己改进并编码

import java.util.ArrayList;
import java.util.List;
import java.util.Random;

public class Road {
String name = null;
List<String> vehicles = new ArrayList<String>();

Road(String name) {
this.name = name;
new Thread(new Runnable() {
@Override
public void run() {
for (int i = 1; i < 1000; i++) {
// 内部类访问外部类的方法
vehicles.add(Road.this.name + "_" + i);

try {
Thread.sleep((new Random().nextInt(10) + 1) * 1000);
} catch (InterruptedException e) {
}
}
}
}).start();
new Thread(new Runnable() {
@Override
public void run() {
for (int i = 0; i < 1000; i++) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Lamp lamp = Lamp.valueOf(Road.this.name);
if (vehicles.size() > 0)
if (lamp.isGreen) {
System.out.println(vehicles.remove(0)
+ " is running....." + "rest:"
+ vehicles.size());
}
}
}
}).start();
}
}

public enum Lamp {
W2E("E2W","W2N",false),W2N("E2S","S2N",false),S2N("N2S","S2W",false),S2W("N2E","W2E",false),
E2W(null,null,false),E2S(null,null,false),N2S(null,null,false),N2E(null,null,false),

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

String oppositeLamp;
String nextLamp;
boolean isGreen;
private Lamp(String oppositeLamp, String nextLamp, boolean isGreen) {
this.oppositeLamp = oppositeLamp;
this.nextLamp = nextLamp;
this.isGreen = isGreen;
}

public void turnGreen(){
isGreen=true;
System.out.println(name()+"変緑");

if(oppositeLamp!=null){
Lamp.valueOf(oppositeLamp).turnGreen();
}
}

public void turnRed(){
isGreen=false;
System.out.println("转换....");
if(oppositeLamp!=null){
Lamp.valueOf(oppositeLamp).turnRed();
}
}

public Lamp getNextLamp(){
Lamp next=null;
if(nextLamp!=null)
next=Lamp.valueOf(nextLamp);
return next;
}
public boolean isGreen(){
return isGreen;
}
}

public class LampController {
Lamp presentLamp;

LampController() {
presentLamp = Lamp.W2E;
new Thread(new Runnable() {
public void run() {
while (true) {
presentLamp.turnGreen();
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
e.printStackTrace();
}
presentLamp.turnRed();
presentLamp = presentLamp.getNextLamp();
}
}
}).start();
}
}

public class MainClass {
public static void main(String[] args) {
String [] directions = new String[]{
"S2N","S2W","E2W","E2S","N2S","N2E","W2E","W2N","S2E","E2N","N2W","W2S"

};
new LampController();
for(int i=0;i<directions.length;i++){
new Road(directions[i]);
}
}
}

---------------------- android培训java培训、期待与您交流! ----------------------

详细请查看:http://edu.csdn.net/heima

抱歉!评论已关闭.