1:画图,这一步至关重要,我因为没画图,脑子想当然,导致了致命错误(画图的话我们可以看到:右转车辆和所有其他路线的车辆是都不会相撞的,所以他可以一直是绿灯,常识呀,哎。其次是左转灯,左转灯会干扰到对面开过来的车,所以当有车辆左转的时候,对面的车必须是红灯,而同方向的车,可以是绿灯)
上面对图的分析,我们就可以看出来,之前的程序可以说上来就错掉了。
2:实现方法
我这里的刚刚开始撕路就错了,就不贴了,我的思路,见之前的那一篇博客。
张老师解法:
a:定义12个 灯对象(其中4个右拐的,一直为true。其他的依次变换)。汗颜呐,当初我以为四个就够了
b:剩下的8个灯对象(分成四组,毫无疑问左拐方向的灯和右边车道的灯为一组,他们状态相同,并且同一时间,只有一组灯可以是绿灯)
c:在灯对象中lamp中用一个变量来保存下一个需要变绿的灯(这种思想面向对象,风险可以控制,我的方法是自己在程序中控制它的顺序,比较麻烦,而且容易出错,思想上其实是面向过程多一点,汗颜)
d:定义12条路线(东西南北路上路线有 东西向,两条,南北向两条,左转的四条,右转的四条,如果有图,有如神助啊,很清楚就能看出来了),每条路线上的车辆放到集合中保存(注意,车辆是有序的,我原先使用的一个int 变量来记录只能记录车辆的数目,不符合实际情况)
e:每条路线对应它上面的灯,如果灯得状态是绿灯的话:让集合中车辆减少(集合需要是队列模式的,先入先出,不难想象,先到的车肯定先走),如果状态时绿灯的话,让集合中的车辆增加。
3:思想:
张老师完全是面向对象的思想:
a:路和灯都为独立对象,路的定时器每1s检测灯得状态一次,绿灯减少车辆,红灯增加车辆。(我在路中定义了一个灯对象,然后死循环,每次循环都检测灯的状态,然后在灯里又是一个死循环,让每个灯亮n秒,黑3*n秒(比较混乱,程序可读性不是很高))
b:张老师所有的控制都是在程序中自己控制的(例如,灯黑以后通知哪个灯需要亮,等等,我是完全用程序去控制的,先让他们有一个顺序,然后让它按着这个顺序一直走)
到这里介绍的差不多了,我也相当受教了,通过这一题看下我犯的错误以及原由:
1:自己拼命的去抽象一个模型出来,却完全是用脑子空想,没有想到去画一个图,帮助自己的思维,这是致命的(希望以后再遇到问题能在分析问题上多花一点时间)
2:在思路并不是很清楚的情况下去写程序,本来就是个错误。
3:面向对象的思想并不是很清晰,我写完以后认为自己那个已经完全面向对象了,后来看来很多地方的控制其实是面向过程的。
以后遇到问题希望:
1:先透彻的分析问题,要做到成竹在胸再去写程序,事半功倍
2:思想更加开放一点,更多的去面向对象
3:思维需要更加缜密,考虑到现实情况多一点(例如那个车辆的统计)
多多改进吧,共勉
上面对图的分析,我们就可以看出来,之前的程序可以说上来就错掉了。
2:实现方法
我这里的刚刚开始撕路就错了,就不贴了,我的思路,见之前的那一篇博客。
张老师解法:
a:定义12个 灯对象(其中4个右拐的,一直为true。其他的依次变换)。汗颜呐,当初我以为四个就够了
b:剩下的8个灯对象(分成四组,毫无疑问左拐方向的灯和右边车道的灯为一组,他们状态相同,并且同一时间,只有一组灯可以是绿灯)
c:在灯对象中lamp中用一个变量来保存下一个需要变绿的灯(这种思想面向对象,风险可以控制,我的方法是自己在程序中控制它的顺序,比较麻烦,而且容易出错,思想上其实是面向过程多一点,汗颜)
d:定义12条路线(东西南北路上路线有 东西向,两条,南北向两条,左转的四条,右转的四条,如果有图,有如神助啊,很清楚就能看出来了),每条路线上的车辆放到集合中保存(注意,车辆是有序的,我原先使用的一个int 变量来记录只能记录车辆的数目,不符合实际情况)
e:每条路线对应它上面的灯,如果灯得状态是绿灯的话:让集合中车辆减少(集合需要是队列模式的,先入先出,不难想象,先到的车肯定先走),如果状态时绿灯的话,让集合中的车辆增加。
3:思想:
张老师完全是面向对象的思想:
a:路和灯都为独立对象,路的定时器每1s检测灯得状态一次,绿灯减少车辆,红灯增加车辆。(我在路中定义了一个灯对象,然后死循环,每次循环都检测灯的状态,然后在灯里又是一个死循环,让每个灯亮n秒,黑3*n秒(比较混乱,程序可读性不是很高))
b:张老师所有的控制都是在程序中自己控制的(例如,灯黑以后通知哪个灯需要亮,等等,我是完全用程序去控制的,先让他们有一个顺序,然后让它按着这个顺序一直走)
到这里介绍的差不多了,我也相当受教了,通过这一题看下我犯的错误以及原由:
1:自己拼命的去抽象一个模型出来,却完全是用脑子空想,没有想到去画一个图,帮助自己的思维,这是致命的(希望以后再遇到问题能在分析问题上多花一点时间)
2:在思路并不是很清楚的情况下去写程序,本来就是个错误。
3:面向对象的思想并不是很清晰,我写完以后认为自己那个已经完全面向对象了,后来看来很多地方的控制其实是面向过程的。
以后遇到问题希望:
1:先透彻的分析问题,要做到成竹在胸再去写程序,事半功倍
2:思想更加开放一点,更多的去面向对象
3:思维需要更加缜密,考虑到现实情况多一点(例如那个车辆的统计)
多多改进吧,共勉