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

来源:互联网 发布:业绩考核软件 编辑:程序博客网 时间:2024/05/22 09:42

------- <a  target="blank">android培训</a>、<a  target="blank">java培训</a>、期待与您交流! ----------详细请查看: 

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

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

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

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

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

    --->>************************ ---- ********

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

 

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

 

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

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

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

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

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

 

 

类代码实现:

    1Lamp类:

    public enum Lamp {

    //前进                              左拐                                  右拐

    S2N("N2S","S2W",false),          S2W("N2E","E2W",false),       S2E(null,null,true),

    E2W("W2E","E2S",false),         E2S("W2N","S2N",false),        E2N(null,null,true),

    N2S(null,null,false) ,          N2E(null,null,false),         N2W(null,null,true),

    W2E(null,null,false) ,         W2N(null,null,false),        W2S(null,null,true);

    String opposite;

    String next;

    boolean lighted;

    //构造函数:初始化当前灯

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

    this.opposite = opposite;

    this.next = next;

    this.lighted = lighted;

    }

    //返回当前灯的状态

    public boolean isLighted(){return lighted;}

    public void light(){

    this.lighted = true;

    if(opposite != null){

    Lamp.valueOf(opposite).light();

    }

    System.out.println(name() + "is Green. Soon there will be cars crossed the street at six deractions.");

    }

    public Lamp blackout(){

    //关闭当前灯 设为false

    this.lighted = false;

    Lamp nextLamp = null;

    if(opposite != null){Lamp.valueOf(opposite).blackout();}

    //检查下一个灯并启动它

    if(next != null){

    nextLamp = Lamp.valueOf(next);

    System.out.println(name() + " to the " + next + " 's light is Green.");

    nextLamp.light();

    }

    return nextLamp;

    }

    }

 

   2LampController类:

    import java.util.concurrent.Executors;

    import java.util.concurrent.TimeUnit;

    public class LampController {

    private Lamp currentLamp;

    public LampController(){

    currentLamp = Lamp.S2N;

    currentLamp.light();

    //启动一个线程 每十秒将当前灯设置为红

    Executors.newScheduledThreadPool(1).scheduleAtFixedRate(

    new Runnable() {

    public void run() {

    currentLamp = currentLamp.blackout();

    }

    },

    10,

    10,

    TimeUnit.SECONDS

    );

    }

    }

 

   3) Road类:

      import java.util.List;

    import java.util.ArrayList;

    import java.util.Random;

    import java.util.concurrent.Executors;

    import java.util.concurrent.TimeUnit;

    public class Road {

    private String name;

    private List<String> vehicles = new ArrayList<String>();

    public Road(String name){

    this.name = name;

    //模拟车辆不断随机上路的过程

    Executors.newSingleThreadExecutor().execute(new Runnable() {

    public void run() {

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

    try {

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

    } catch (InterruptedException e) {

    e.printStackTrace();

    }

    vehicles.add(Road.this.name + "_" + i);

    }

    }

    });

    //每隔一秒检查对应的灯是否为绿,如果是 ,则放行一辆车,具体操作为从vehicles集合中移除第一辆车.

    Executors.newScheduledThreadPool(1).scheduleAtFixedRate(

    new Runnable() {

    public void run() {

    if(vehicles.size() > 0){

    if(Lamp.valueOf(Road.this.name).isLighted()){

    System.out.println(vehicles.remove(0) + " is traversing");

    }

    }

    }

    },

    1,

    1,

    TimeUnit.SECONDS);

    }

    }

    最后在Main方法中启动系统:public static void main(String[] args) {

    String[] deractions = {"S2N","S2W","E2W","E2S","N2S","N2E","W2E","W2N","S2E","E2N","N2W","W2S"};

    //模拟十二条方向的路线

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

    new Road(deractions[i]);

    }

    //启动交通灯控制器

    new LampController();

    }

 ------- <a  target="blank">android培训</a>、<a  target="blank">java培训</a>、期待与您交流! ----------详细请查看:http://edu.csdn.net  

0 0
原创粉丝点击