黑马程序员 java 面试之交通信号灯

来源:互联网 发布:mysql增删改查sql语句 编辑:程序博客网 时间:2024/05/16 15:51

                           ----------- android培训java培训、java学习型技术博客、期待与您交流! --------

/*需求:交通灯。分析:每条道路的车都只要看直行和左转。所以,要考虑的道路就只有四条,其他的都一样。道路上的车和灯都是在变化,可以定义定时器来完成。*/class Road{//每一条路可以看成一个集合,集合里有各种车,定时器每隔1秒产一辆车。private List<String> list = new ArrayList<String>();private name;Road(String name){this.name = name;ExecutorService pool = Executors.newSigleThreadExecutor();pool.execute(new Runnable(){public void run(){for(int x = 0; x < 100 ; x++){try{Thread.sleep((new Random().nextInt(10) + 1) * 1000);}catch (Exception e){System.out.println(e.toString());}list.add(Road.this.name + "" + x);//启动一个线程,控制出现的车数。}}}); ScheduledExecutorService timer = Executors.newScheduledThreadPool(1);//出现的间隔。 timer.scheduleAtFixedRate(new Runnable() {public void run(){if(list.size() > 0){boolean light =Lamp.valueOf(Road.this.name).isLighted();if(light)System.out.println(list.remove(0)+ "cheleile");}} },  1, 1,  TimeUnit.SECONDS)}}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 boolean lighted;private String opposite;private String next;private Lamp(){}private Lamp(String opposite){this.opposite = opposite;}private Lamp(String opposite,String next,boolean lighted){this.opposite = opposite;this.next = next;this.lighted = lighted;}public boolean isLigthed(){return lighted;}public void light()//出现的灯。{this.lighted = true;if(opposite != null)Lamp.valueOf(opposite).light();//反向的灯。}public Lamp blackOut()//下一个灯。{this.lighted = false;if(opposite != null)Lamp.valueOf(opposite).blackOut();Lamp nextLamp = null;if(next != null)nextLamp = Lamp.valueOf(next);Lamp.valueOf(next).light();return nextLamp;}}class LampController  //定时器,每隔10秒将当前灯变红和将下一个灯变绿。{private Lamp currentLamp;public LampController(){currentLamp = Lamp.S2N;currentLamp.light();ScheduledExecutorService timer = Executors.newScheduledThreadPool(1);timer.scheduleAtFixedRate(new Runnable(){public void run(){currentLamp = currentLamp.blackOut();}} ,10,10,TimeUnit.SECONDS)}}class Function  //主程序入口。{public static void main(String[] args){String[] dirRoads = {"S2N","S2W","E2W","E2S","N2S","N2E","W2E","W2N","S2E","E2N","N2W","W2S"};for( String dirRoad : dirRoads)new Road(dirRoad);new LampController();}}


                          ----------- android培训java培训、java学习型技术博客、期待与您交流! -----------

0 0