您的位置:首页 > 职场人生

黑马程序员----交通灯管理系统(2)

2012-02-23 20:22 513 查看
 

---------------------- Android 培训java 培训 、期待与您交流! ----------------------

交通灯管理系统
//Lamp

====================================================

package com.itcast.study.traffic;

 

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;

   }

 

   /*灯的红绿*/

   private boolean lighted;

   /*对应的灯*/

   private String opposite;

   /*下一个灯*/

   private String next;

 

   public boolean isLighted() {

      return lighted;

   }

 

   public void light() {

      this.lighted = true;

      if (opposite != null) {

         Lamp.valueOf(opposite).light();//让对应的灯变绿

      }

      System.out.println(name() + " lamp is green, 下面总共应该有6个方向能看到汽车穿过!");

 

   }

 

   /*

    * 灯和对应的灯变红,下一个灯变绿

    */

   public Lamp blackOut() {

      this.lighted = false;

      if (opposite != null) {

         Lamp.valueOf(opposite).blackOut();

      }

 

      Lamp nextLamp = null;

      if (next != null) {

         nextLamp = Lamp.valueOf(next);

         System.out.println("绿灯从" + name() + "-------->切换为" + next);

         nextLamp.light();

      }

      return nextLamp;//返回下一个灯的名字

   }

}

 

 

 

====================================================

 

//Road

====================================================

package com.itcast.study.traffic;

 

import java.util.ArrayList;

import java.util.List;

import java.util.Random;

import java.util.concurrent.ExecutorService;

import java.util.concurrent.Executors;

import java.util.concurrent.ScheduledExecutorService;

import java.util.concurrent.TimeUnit;

 

public class Road {

      private List<String> vechicles = new ArrayList<String>();// 接收车的数量

      private String name = null;// 定义路的名字

 

      public Road(String name) {

           this.name = name;

 

           //

           ExecutorService pool = Executors.newSingleThreadExecutor();// 创建线程

           pool.execute(new Runnable() {

                 public void run() {

                      for (int i = 1; i < 1000; i++) { // 产生999辆车

                            try {

                                  Thread.sleep((new Random().nextInt(10) + 1) * 1000);// 让线程随机休息1秒到10秒

                            } catch (InterruptedException e) {

                                  e.printStackTrace();

                            }

                            vechicles.add(Road.this.name + "_" + i);// 把车名录入数组中

                      }

                 }

 

           });

           ScheduledExecutorService timer = Executors.newScheduledThreadPool(1);// 定时器

           timer.scheduleAtFixedRate(new Runnable() {

                 public void run() {

                      if (vechicles.size() > 0) {

                            boolean lighted = Lamp.valueOf(Road.this.name).isLighted();//灯的红绿

                            if (lighted) {

                                  System.out.println(vechicles.remove(0)

                                             + " is traversing !");// 把第一辆车移走

                            }

                      }

 

                 }

           }, 1, 1, TimeUnit.SECONDS);// 第一次过一秒通过一辆车,以后每过一秒通过一辆车

 

      }

}

 

 

====================================================

 

//LampController

====================================================

package com.itcast.study.traffic;

 

import java.util.concurrent.Executors;

import java.util.concurrent.ScheduledExecutorService;

import java.util.concurrent.TimeUnit;

 

public class LampController {

      private Lamp currentLamp;//当前的灯

     

      public LampController(){

           //首先指定一个灯,并且让它变绿。   

           currentLamp = Lamp.S2N;

           currentLamp.light();

          

           /*做一个定时器,让它每过10秒让当前的灯变红,*/      

           ScheduledExecutorService timer =  Executors.newScheduledThreadPool(1);

           timer.scheduleAtFixedRate(

                       new Runnable(){

                            public  void run(){

                                  System.out.println("来了");

                                  currentLamp = currentLamp.blackOut();

                      }

                      },

                      10,

                      10,

                      TimeUnit.SECONDS);

      }

}

 

 

====================================================

 

//MainClass

====================================================

package com.itcast.study.traffic;

 

public class MainClass {

 

   /**

    * @param args

    */

   public static void main(String[] args) {

     

      /*创建12个路*/     

      String [] directions = new String[]{

            "S2N","S2W","E2W","E2S","N2S","N2E","W2E","W2N","S2E","E2N","N2W","W2S"   

      };

      for(int i=0;i<directions.length;i++){

         new Road(directions[i]);

      }

     

      /*创建一个控制控制器*/    

      new LampController();

   }

 

}

 

 

 

 

====================================================

 

---------------------- Android 培训java 培训 、期待与您交流! ----------------------
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  交通 null string n2 timer class