对于交通灯系统的学习
来源:互联网 发布:mac ndk环境变量配置 编辑:程序博客网 时间:2024/05/22 05:24
通过这个项目,我的主要收获有:
1.对于Executors定时器的应用
2.对于面向对象编程的思想有更深入的理解
3.了解了需求分析--代码编写的过程。
我觉得听过之后,虽然有了认识,但是自己再做一遍能更加深记忆。同时能在实践过程中,发现问题,解决问题。
下面是我自己实践的过程:
首先分析需求,可以借助画图,这有助于更好的理解。
然后,类的设计:
灯,Lamp枚举,封装了12个红绿灯及其的改变方式。
路线,Road类,封装增加删除车辆的方法,其中增加构造器中实现(线程,避免难产),删除在定时器中实现
交通灯控制器,LampControler,一个定时器,每隔一段时间改变红绿灯。
其中对于定时器的实现之前没有接触,所以我赶紧借助API学习了下。
实现Lamp 交通灯方向要借助于画图,否则很容易搞混。其中右拐设置为常绿,其余8个可以两个为一组(状态一致),分别为【N2S,S2N】,【E2W,W2E】,【W2N,E2S】,【S2W,N2E】.
理清了思路之后,发现整个程序的运行就是3个线程,一个增加车辆(在构造器中实现),一个减少车辆(定时器,并且要判断方向灯是否亮了),一个负责交通灯的转换。
根据上述思路,我编写好了代码。但并不是很顺利,遇到了些问题。
1.哪里要进行同步?由于是road操作车辆,LampControler操作Lamp的切换,并没有共享数据,所以不用担心多线程的安全问题。
2.车辆放行时,未进行判断灯是否亮了?这个判断将两个线程连接起来,要加Lamp.valueOf(Road.this.name).isLighted()这个判断,满足条件才可以放行。
3.随机上路时未增加随机数?Thread.sleep((new Random.nextInt(10)+1)*1000)
4.枚举的构造器不能加public修饰符。
5.Lamp.valueOf()方法需要判断,因为有可能传进去的参数错误。
6. 还有关于面向对象的新认识,像“小球从绳子的一端到另一端”这个例子让我印象深刻,将其纪录下来备忘。
class Rope{private int startPoint;private int enndPoint;public Rope(int startPoint ,int endPoint){this.startPoint = startPoint;this.enndPoint = endPoint;}public int nextPoint(){//谁拥有数据,谁就提供操作数据的方法return new Random().nextInt();}}class Ball{private Rope rope;private int currentPoint;public Ball(Rope rope,int currentPoint){this.rope = rope;this.currentPoint = currentPoint;}public void move(){currentPoint = rope.nextPoint();System.out.println("小球移动到了"+currentPoint);}}
- 对于交通灯系统的学习
- 交通灯系统的学习
- 黑马程序员 交通灯管理系统的学习
- 黑马程序员 :交通灯系统的学习
- 交通灯管理系统学习
- 交通灯管理系统学习
- 交通灯管理系统学习
- 交通灯管理系统学习
- 交通灯管理系统视频学习
- 交通灯管理系统学习总结
- 交通灯管理系统 学习笔记
- 交通灯管理系统学习笔记
- java学习之交通灯系统
- 交通灯管理系统学习总结
- 交通灯管理系统学习小结
- 交通灯管理系统学习笔记
- 学习日记-交通灯管理系统
- 黑马程序员--交通灯系统学习
- PPS2013校园招聘笔试题
- Qt 命令 -qws
- webServcie 接口和http接口
- WordPress上传中文文件名或图片名乱码问题
- yum的优先级
- 对于交通灯系统的学习
- 2013豆瓣校园招聘研发类笔试题
- 面试题:输入一个单向链表,输出该链表中倒数第k个结点。链表的倒数第0个结点为链表的尾指针。
- Linux程序存储空间布局
- adb logcat tools
- 网新恒天2013年校园招聘笔试
- Vim插件
- •vc++中mfc窗口对象的清除-(2013/09/18)
- 关于数组下标越界