黑马程序员_7K面试题之交通灯系统(二)

2014-11-23 21:35:26 · 作者: · 浏览: 25
l,true),E2N(null,null,true),N2W(null,null,true),W2S(null,null,true); //这里有必要解释一下S2N("N2S","S2W",false): //参数一指定了与当前灯向对应的灯,参数二,指定该灯的下一个灯, //参数三,指定该灯是否亮起绿灯 //corresponding(对应) String correlight = null; String next = null; boolean flag; Lamp nextlight; Lamp(String correlight,String next,boolean flag ){ this.correlight = correlight; this.next = next; this.flag = flag; } public boolean isstate(){ return flag; } //指定开启那条路上的绿灯 public void oppen(){ flag = true; if(correlight != null){ //判断当前要开启的灯是否有与之对应的灯,有,则开启,没有则不用开启,也防止的死循环 Lamp.valueOf(correlight).oppen();//这里的意思是得到当前对象对应的灯并打开该绿灯 //Lamp.valueOf(String str )返回带指定名称的指定枚举类型的枚举常量。这里得到的也就是和correlight同名的枚举常量 } } //指定关闭那条路上的绿灯 public Lamp close(){ flag = false; if(correlight != null){ Lamp.valueOf(correlight).close(); } //关闭的同时,要打开该灯的下一个灯,如果有的话 if(next !=null){ nextlight = Lamp.valueOf(next); nextlight.oppen(); } return nextlight; } }

③LampManage类的编写

该类为一个交通灯的总控制,为了达到方便 ,我们创建只有一个线程的线程池,该线程池用来控制红绿灯的交换时间,我这里初始灯是由S2N,在覆盖了接口Runnable的run方法中,要获得Lamp类中close方法返回的下一个绿灯的对象。由此就可以不断循环控制整个交通灯,

这里设置了每隔10s绿灯就切换到下一条线路上。

package cn.itcast.Traffic;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;

public class LampManage {
	//该类用来管理整个交通灯的运作
	//也就是搞一个定时器,让交通灯可以互相切换
	
	Lamp lamp ;
	
	public LampManage(){
		//先指定以那条路上的灯开始
	
		lamp = Lamp.S2N;
		
		ScheduledExecutorService  timer =	Executors.newScheduledThreadPool(1);//设置一个定时器,也就是开启一个线程
      	timer.scheduleAtFixedRate(
      			new Runnable() {
					
					@Override
					public void run() {
						// TODO Auto-generated method stub
					System.out.println(lamp+"方向的灯亮了。。。。。。。。。");
					System.out.println("相对应的有6个方向可以通车了 分别是 :S2E,E2N,N2W,W2S,"+lamp.correlight+","+lamp);
				     lamp = lamp.close();//开启10s后执行该段代码,也就是关闭当前的交通灯开启下一个交通灯
				   
						
					}
				},
      			10,
      			10,
      			TimeUnit.SECONDS);
		
		
		
	}
	

}

④MainManage类的编写

该类的编写很简单,就是构造12条线路,调用交通灯的总控制类,使得可以在每条线路随机增加汽车且调动了红绿灯来控制车辆之间的来往

package cn.itcast.Traffic;
public class MainManage {
	
	
	//产生十二个红绿灯
	public static void main(String[] args) {
    String lamp[]={"S2N","S2W","E2W","E2S","N2S","N2E","W2E","W2N","S2E","E2N","N2W","W2S"};
		
		for(int i=0;i
  
   

到此交通灯模拟就算是结束,,,看似简单,却是用到了很多的基础知识,尤其是面向对象的基础。想要学得更好,基础是必不可少的。