黑马程序员(10) 交通灯管理系统视频教程

12条线路,可以简化为4条线路,考虑到左右上下的堆成性,简化程序设计过程。


编写一个枚举类型表示12个车辆行驶的方向。

public enum Lamp {
    /*每个枚举元素各表示一个方向的控制灯*/    
    S2N("N2S","S2W",false),S2W("N2E","E2W",false),E2W("W2E","E2S",false),E2S("W2N","S2N",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;
    }

S2N("N2S","S2W",false),S2W("N2E","E2W",false),E2W("W2E","E2S",false),E2S("W2N","S2N",false)这四个灯有逻辑设定,把对面的灯也变成和自己一样,旁边的灯编程相反。

路灯控制器。

        ScheduledExecutorService timer =  Executors.newScheduledThreadPool(1);
        timer.scheduleAtFixedRate(
                new Runnable(){
                    public  void run(){
                        System.out.println("来啊");
                        currentLamp = currentLamp.blackOut();
                }
                },
                10,
                10,
                TimeUnit.SECONDS);

Road代表12条路线的每一条路线的实例对象

        new Runnable(){
                    for(int i=1;i<1000;i++){
                        try {
                            Thread.sleep((new Random().nextInt(10) + 1) * 1000);
                        } catch (InterruptedException e) {
                            e.printStackTrace();
                        }
                        vechicles.add(Road.this.name + "_" + i);
                    public void run(){
                        if(vechicles.size()>0){
                            boolean lighted = Lamp.valueOf(Road.this.name).isLighted();
                            if(lighted){
                                System.out.println(vechicles.remove(0) + " is traversing !");
                            }
                        }
                        
                    }
                },
                1,
                1,
                TimeUnit.SECONDS);

sleep模拟车辆行驶。


PS.原先以为只有红灯时才能右转,貌似绿灯时也可以。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值