黑马程序员---交通灯管理系统 学习笔记

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

交通灯管理系统:

1. 思路分析

          <1>. 路线与向分析: 总共有12条路线;  每一条直行路线都有直行方向, 左转方向, 右转方向; 每条直行方向都是先放行直行车辆, 再放行左转车辆, 右转车辆不受限制, 可以一直行驶; 先确定任意一条直行路线, 其对面的红绿灯状态和它一致, 故对面的可以不用考虑, 再出去右转车辆, 现在只剩下4条路线有逻辑 ; 假设从南到北开始, 只需考虑南到北, 南左转西, 东向西, 东左转南;(因此可以设计12个方向, 其中四个方向为主体逻辑)

          <2>. 交通灯转换分析: 假设以南到北为初始方向, 当南到北为绿灯,其对面的行驶方向也必须是绿灯,而每条直行方向上的右转方向由于不受限制, 我们可以假设它都是绿灯, 这样在任意时刻就总是有6个绿灯, 6个红灯; 当南到北为绿灯后, 假设10秒后该方向切换为红灯, 那么此时南左转西方向则为绿灯, 再10秒后轮到东到西方向为绿灯, 然后再是东左转南, 最后回到南到北为绿灯的状态, 如此循环每条路线上就绿灯10秒, 红灯30秒; (可以设计一个控制红绿灯交换的类, 当本方向为绿灯时, 10秒后下一个方向即变为绿灯,而且它对面方向也是绿灯状态,应该打印出每条处于绿灯状态的方向, 这样更明确)

          <3>. 车辆行驶分析: 假设每个方向的路上初始化有100辆车, 每辆车通过路口耗时1秒, 理论上,每一个处于绿灯(假设为10秒)状态的方向的路应该通过10辆车, 但是注意: 车辆是随机产生的, 一个处于绿灯方向上的路可能有车通过, 也可能没有, 也可能一开始没有车,但是中间来了车, 因此让每条路上的车辆随机产生, 不能固定

2.逻辑方面要求::

         <1>. 异步随机生成按照各个方向行驶的车辆

         <2>.信号灯忽略黄灯,只考虑红灯和绿灯; 左转车辆受信号灯控制, 右转不受控制; 具体逻辑和现实生活一致, 不考虑特殊情况; 同方向车辆先放直行, 再放行左转车辆,

         <3>. 每辆车通过路口时间为1秒, (可用sleep方式模拟)

         <4>. 随机生成车辆时间和红绿灯交换时间均可以自定义设置;

    

    3. 实现代码部分:

          <1>.Lamp类------每个Lamp元素代表一个方向上的灯,总共有12个方向,所有总共有12个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;
            }

            / **
             * 某个灯变绿时,它对应方向的灯也要变绿
             */ 
            public void light(){
                        this.lighted = true;
                        if(opposite != null){
                               Lamp.valueOf(opposite).light();
                        }
                      System.out.println(name() + " lamp is green,下面总共应该有6个方向能看到汽车穿过");
            }

看过了张老师的交通等管理系统的视频后, 自己在逻辑方面还是有些欠缺, 张老师所讲的能听懂,所写的代码, 也还可以看懂, 但是写不出来, 对基础知识还要进行加强, 理解知识不够全面,张老师所讲的可以听懂, 证明还是有很大进步的, 就是对知识的运用来解决现实的问题上的能力不够, 长老师的课讲的很清晰, 而且所用的例子也非常的突出,可以用知识和现实的事物完美的联系起来传授给我们这些后辈.长老师是个好前辈!

 

---------------------- android培训java培训、期待与您交流! ----------------------
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值