[黑马程序员]交通灯系统--自己设计

看了张老师的交通灯面试题的讲解,收获颇丰。老张的确是牛人。在刚拿到题的时候,我自己想了想,发现没有一个清晰的思路。可是等他讲的时候,我发现很多地方比我想的确实要好。而且思路非常清晰。

那,看完了讲解,能不能按照自己的思路作呢?

我尝试了下,代码如下:

思路(和张老师有些不同):

1。对象的抽取:
	舞台(整个的场景,用来做main的),车,路,交通灯,交通控制系统。
这部分基本一样。

但是,我不是把灯分成12个,而是把路分成12条。

我是这么想的,在实际中,灯有红绿,而一套交通控制系统,只要有两套红绿灯就够了。

而路和交通灯的关系,是通过在场景里设定的,而不是放到路里面,或者灯的本身里面。

这么做,好处是,如果增删路的条数,不会动很大的东西。

关于灯,张老师在做的时候,考虑的是红,绿两种状态,可是,需求里说,“同方向等待车辆,应先放行直行车辆,而后放行左转车辆”,并且考虑到日常生活,如果只有一条车道,直行车和左转的车,如果交叉进入一个车道,那么就不可能达到这个要求,所以,只能是按照2车道设计,即:仅左行车道,和直行车道。

于是,将绿灯分成了左行和直行两种。

2.	对象关系分析:
a)	车,路,灯 都在舞台上
b)	车在马上
c)	灯受控制系统的控制
d)	灯有两个颜色:红,绿
e)	十字路口,所以有2条路,受2组灯控制
f)	红灯后是绿灯
g)	绿灯先放真行,而后放左拐
h)	右行的车辆不受灯的控制
i)	绿灯的总时间和红灯的总时间是一致的,否则,会出现同时为绿灯,或者同时为红灯的情况。
在场景中,共有如下单独的线程:

1。随机增加车辆的线程

2。12条不同方向的路的线程,用来扫描,对比条件,然后去掉排队的车辆。

3。独立的交通控制系统。我灯的变化,和路,车毫无关系。但是,路上的车的情况,要根据我的灯的情况而变化。


3.	情景设计:
a)	右行车不受灯的控制,所以任何时候,只要有车都可以直接通过。
b)	设起始点是E2W方向为红灯
i.	W2E,E2W方向,红灯
ii.	前20秒
1.	N2S方向,直行绿灯
2.	S2N方向,直行绿灯
iii.	后20秒
1.	N2S方向,左转绿灯
2.	S2N方向,左转绿灯
iv.	30秒后,S2N,N2S方向变为红灯
c)	进入第二个场景,S2N,N2S方向变为红灯
i.	S2N,N2S方向变为红灯
ii.	前20秒:	
1.	W2E方向,直行绿灯
2.	E2W方向,直行绿灯
iii.	后10秒
1.	W2E方向,左转绿灯
2.	E2W方向,左转绿灯
iv.	30秒后,回到初始场景(但是每条路的存留车辆不变)
所有的场景,都放到舞台里导演。

关于这一部分,我一直没有把握,感觉有些东西还能抽出来。

其实,我的想法很简单。大概的步骤可以概括如下:

1。有一个舞台:main

2。舞台加入道路

3。舞台加入控制系统

4。在路上加车

5。道路上车的数量,根据控制系统改变


但是这么搞,大量的逻辑都放到了5的里面搞的代码很难看。。。等培训完了,如果有好的思路,再修改吧。搞了一下午,头大了,不想搞了。。。。



下面就是所有的代码:

Vehicle.java

package com.linuxgg.interview.trafic;

public class Vehicle {
	private Direction whereTogo;
	private String name = null;


	// 生成去来自哪里去往何方的车
	public Vehicle(Direction whereTogo, String name) {
		this.whereTogo = 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值