黑马程序员—23—java面试:有关交通灯学习笔记和学习心得

来源:互联网 发布:python rsa 编辑:程序博客网 时间:2024/05/22 10:57

 ------- <a href="http://www.itheima.com" target="blank">android培训</a><a href="http://www.itheima.com" target="blank">java培训</a>、期待与您交流! ----------

1.  交通灯管理系统逻辑:

异步随机生成按照各个路线行驶的车辆

信号灯忽略黄灯,只考虑红灯和绿灯。

应该考虑左转车辆控制信号灯,右转车辆不受信号灯控制

具体信号灯控制逻辑与现实逻辑相同:南北方向车辆与东西车辆交替放行,同方向等待车辆应先放直行车辆而后放左转车辆

每辆车通过路口时间为1

随机生成车辆时间间隔以及红绿灯交换时间间隔自定,可以设置

总共12条路线,为了统一编程模型,可以将右转的常绿状态,其他8条线路两两成对

,可以归纳4组,只需考虑标准数字号的4条路线的控制灯的切换顺序,反方向的路线

控制等跟随者条切换。

2.  面向对象的分析与设计

a) 每条线上都会出现多辆车,路线要随机增加新的车,在灯绿期间还要每秒减少一辆车

b) 每条路线每隔1秒都会检查控制本路线的灯是否为绿,一个灯有绿变红时,应将下一个方向的灯变绿

如:球从一根绳子的一段移动到另一端

public class XiaoQiuGun {

/**

 * @param args

 */

public static void main(String[] args) {

// TODO 自动生成方法存根

}

}

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)

{}

}

class Ball

{

private Rope rope;

private Point currentPoint;

public Ball(Rope rope,starPoint)

{

this.rope = rope;

this.currentPoint = startPoint;

}

public void move()

{

currentPoint = rope.nextPoint(currentPoint);

System.out.println("小球移动了"+currentPoint);

}

}

总结:即谁有数据,谁就有操作数据的方法

12个灯用枚举,

public enum 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;

}

road类,随机产生车,用线程池;

ExecutorService pool = Executors.newSingleThreadExecutor();

pool.execute(new Runnable(){

public void run(){

for(int i=1;i<1000;i++){

try {

Thread.sleep((new Random().nextInt(10) + 1) * 1000);

} catch (InterruptedException e) {

e.printStackTrace();

}

vechicles.add(Road.this.name + "_" + i);

}

}

});

3.  学习心得体会

掌握面向对象编程,学习老师的编程思想,

学习老师的编

 

 

 ------- <a href="http://www.itheima.com" target="blank">android培训</a><a href="http://www.itheima.com" target="blank">java培训</a>、期待与您交流! ----------

0 0
原创粉丝点击