黑马程序员——交通路灯管理系统
来源:互联网 发布:.moe域名注册 编辑:程序博客网 时间:2024/05/22 07:07
------- android培训、java培训、期待与您交流! ----------
我刚看完张老师这个题,我蒙了,我真不知道该从何下手。就像张老师说的:我一直不知道十字路口有多少路线,不知道怎样去分析这道题。于是我开始认真看老师的讲解。
刚开始我以为就会进入主题,原来张老师把这道题的背景和我一直忽略的问题等。下面试我从张老师这套教程中所学到的:
(一)一个人要想做成一番大事,必须珍惜和保护好自己的身体:
邓小平70几岁处于人生低落时期时,仍然坚持游泳锻炼身体,就是为日后复出做准备,老骥伏枥,志在千里。即使你学富五车,才高八斗,如果没有好的身体,等到真正要施展抱负,想去实现宏伟大业时,这往往都需要坚持和耐力,可能在接近成功时,就壮志未酬身已衰,出师未捷身先卒。真是一语惊醒梦中人。所以身体是革命的本钱!
(二)切不可空想,一定要画图!
当所遇到的问题你不能抽象出来,画图非常有助于理解和分析问题,例如此题,总共有12条路线,为了统一编程模型,可以假设每条路线都有一个红绿灯对其进行控制,右转弯的4条路线的控制灯可以假设称为常绿状态,另外,其他的8条线路是两两成对的,可以归为4组,所以,程序只需考虑图中标注了数字号的4条路线的控制灯的切换顺序,这4条路线相反方向的路线的控制灯跟随这4条路线切换。(画完图才知道,原来有十二条路线!呵呵!)
(三)面向对象设计把握一个重要的经验:谁拥有数据,谁就对外提供操作这些数据的方法。
牢牢掌握几个典型的案例:人在黑板上画圆,列车司机紧急刹车,货员统计收获小票的金额,你把门关上了等。
因为在面向对象编程时,自己的数据要包装,外部不能访问,所以操作数据的方法只能放在本类里面
“两块石头磨成一把石刀,石刀可以砍树,砍成木材,木材做成椅子”,
对象不能把自己销毁而变成另外一个对象,把自己变成另一个对象,
“球从一根绳子的一段移动到了另一端”,
对象:Rope,Ball
Class Rope{
private Point start;
private Point end;
public Rope(Point start,Point end){
this.start=start;
this.end=end;
}
Public Point nextPoint(Point currentPoint){
/*
通过两点一线的数学公式计算当前的下一个点,如果是终点,则返回null
*/
}
}
class Ball{
private Rope rope;
private Point currentPoint;
public Ball(Rope rope,startPoint){
this.rope=rope;
this.currentPoint=startPoint;
}
public void move(){
currentPoiont=rope.nextPoint(currentPoint);
System.out.println(“小球移动到+currentPoint);
}
}
(四)交通管理系统
首先分析它的需求
A.异步随机生成按照各个路线行驶的车辆。
B.信号灯忽略黄灯,只考虑红灯和绿灯。
应考虑左转车辆控制信号灯,右转车辆不受信号灯控制。
南北向车辆与东西向车辆交替放行,同方向等待车辆应先放行直行车辆而后放行左转车辆。
每辆车通过路口时间为1秒,可用Thread.sleep(TIME)实现。
C.随机生成车辆时间间隔以及红绿灯交换时间间隔自定,可以设置。
获取的信息就是 lamp(灯)、road(路)、controlLamp控制灯的红绿
而车则只是一个工具,不需要建立其对象。
1)建立灯这个对象,对象里要设计灯的红绿切换方法,使用枚举
2)谁拥有数据就对用有操作数据的方法,所以建立路对象,控制车辆的增减
3)控制灯呢则按照一定时间切换灯。
我感觉就是十二条路线的设计最难:
实际情况中有十二条路线,像张老师里面的一样,2表示to(我感觉这样写老专业了,呵呵)
S2N,S2W,E2W,E2S,//由南向、东向出发的路线(右转路线除外)
N2S,N2E,W2E,W2N,//与上边四个方向相反的由北向、西向出发的路线(右转路线除外)
S2E,E2N,N2W,W2S;//右转路线,无论红灯、绿灯都可以走==相当于都是绿灯
路线考虑清楚后,接下来就是灯的问题了:直行通过后,下一个就是其左转路线。
当某个路口亮绿灯时(S2N),与之对应的相反路线的灯(N2S)为绿灯,车可以通行,而与之对应的下一个路线(S2W)灯则是红灯,当此路口灯为红灯时,与之对应的相反路线的灯也变红,它的下一个路线则变绿。
1)红绿灯有两个功能:亮绿灯、亮红灯(亮红灯的时候,相反路线也红灯,下一个路线亮绿灯,并在这个方法里返回亮起的绿灯对象)
2)控制红绿灯的亮灭:按照题目的要求,
每十秒当前绿灯转红:相反方向绿灯也转红,下一方向转绿。
下面考虑道路的功能
1)随机产生一辆上路的车,
2)每隔一秒判断对应的灯是否为绿,是的话放行一辆车。
通过对张老师这个视频的学习,我对面向对象的设计又加深很多,就如我拿到黑马给我的基础测试题中就有一道:妈妈做饭,没有盐了,叫小明买盐,买盐要三分钟,盐买回来了妈妈继续做饭:
分析:妈妈做饭,和叫可用两个方法,cook,shout;小明买盐,shop;盐有用完的时候,所以我就用一个整形变量表示,时间好说了,就用线程啦! 但妈妈不能以有盐就做饭吧,所以我固定好妈妈做饭要用多少盐,
下面是我的代码:
import java.util.Random;
class Mum
{
int salt=5; //假设家里有5g盐
int count=0;
XiaoMing xiaoM=null;
public Mum(){
xiaoM=new XiaoMing(); //妈妈又个儿子叫小明
cook();
}
publicvoid cook(){
for(int i=salt;i>0;i--){
System.out.print("妈妈做饭 ,"); //有盐妈妈就做饭
count++;
if(count==15){ //妈妈做饭需要15g盐
System.out.println("\n"+"------------饭做好了----------------");
System.exit(0);
}
}
shout(); //没盐了,叫小明买盐
cook(); //盐买好了,继续做法
}
publicvoidshout(){
System.out.println("小明,没盐了!帮我买点盐");
try{
Thread.sleep(3000); //在买盐的过程中,要花3分钟,这里我用三秒钟代表三分钟;
}catch(Exception e){
e.printStackTrace();
}
salt= xiaoM.shop(); //小明去买盐了
}
}
class XiaoMing
{
Random rd=new Random();
publicint shop(){
System.out.println("小明买盐了!");
returnrd.nextInt(5)+1; //定义盐的变量,每次买1~5g盐
}
}
publicclass Noname1
{
publicstaticvoid main(String args[]){
new Mum();
}
}
以上是个人同过对张老师“交通灯管理系统面试题破解”所总结的,水平有限,希望能在“黑马”提高自己!
- 黑马程序员——交通路灯管理系统
- 黑马程序员—交通等管理系统
- 黑马程序员——交通等管理系统
- 黑马程序员 交通等管理系统
- 黑马程序员_交通等管理系统
- 黑马程序员 交通等管理系统
- 黑马程序员——java面试题之交通等管理系统
- 黑马程序员 交通系统
- 黑马程序员高级视频学习笔记交通等管理系统
- 黑马程序员--高薪面试题交通信号灯管理系统
- [黑马程序员]--交通等系统
- (黑马程序员)交通信号灯系统
- 黑马程序员-红绿灯交通系统
- 黑马程序员--7K:路灯系统
- 黑马程序员——交通信号灯问题
- 黑马程序员——交通信号灯
- 黑马程序员——冲刺阶段——7K面试题(交通信号灯系统)
- 黑马程序员_java 交通信号灯系统
- shell脚本获得当前日期前一个月的日期
- 转载 关于android4.0模拟键盘不能使用的bug解决方案
- 后台进程不等于守护进程
- ubuntu初始化修改root密码
- android程序出现了奇怪的错误 Field requires API level 5 (current min is 1): ......
- 黑马程序员——交通路灯管理系统
- 程序异常退出时发送邮件报告的代码
- 第03章 面向对象 35 hashcode解释
- HDU3722 Card Game 二分图之最优匹配 KM算法
- 公约数
- DB2 分区
- poj 1663 Number Steps
- Nmap源码分析(主机发现)
- 第03章 面向对象 36 Object类之equals方法