黑馬程式員 交通燈管理系統

來源:互聯網
上載者:User

 

----------- android培訓、java培訓、java學習型技術部落格、期待與您交流! ------------

根據交通燈管理系統的需求:設計一個Road類來表示路線,一個Road對象就表示這一條路線,總共有十二條路線。每條路線上隨機增加新的車輛,增加到一個集合中儲存。每條路線每隔一秒都會檢查控制本路線的燈是否為綠,是則將本路線儲存車的集合中的第一輛車移除,即表示車穿過了路口。

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(){            @Override            public void run() {                for (int i = 1; i < 1000; i++) {                    try {                        Thread.sleep((new Random().nextInt(10)+1)*1000);                    } catch (InterruptedException ex) {                        Logger.getLogger(Road.class.getName()).log(Level.SEVERE, null, ex);                    }                    vechicles.add(Road.this.name+"_"+i);                }            }                    });        ScheduledExecutorService timer = Executors.newScheduledThreadPool(1);//添加一個線程每隔1秒查看自己所在的路線是否綠燈,如果綠燈本路線還有車將開走一輛        timer.scheduleAtFixedRate(                new Runnable(){            @Override            public void run() {                if(vechicles.size()>0){                    boolean lighted = Lamp.valueOf(Road.this.name).isLighted();                    if(lighted==true){                        System.out.println(vechicles.remove(0)+"is traversing !");                    }                }            }                 },                1,                1,                TimeUnit.SECONDS);    }設計一個Lamp類來表示一個交通燈,每個交通燈都維護一個狀態:亮(綠)或不亮(紅)。總共有12條路線,總共要產生12個交通燈。右拐彎的路線本來不受燈的控制,但是為了讓程式採用統一的處理方式,故假設出有四個右拐彎的燈,只是這些燈為常亮狀態,即永遠不變黑。其他8條路線的燈,它們是兩兩成對的,可以歸為4組。從這4組中各取出一個燈,對這4個燈依次輪詢變亮,與這4個燈方向對應的燈則隨之一同變化,因此Lamp類中要有一個變數來記住自己相反方向的燈,在一個Lamp對象的變亮和變黑方法中,將對應方向的燈也變亮和變黑。每個燈變黑時,都伴隨者下一個燈的變亮,Lamp類中還用一個變數來記住自己的下一個燈。無無論在程式的什麼地方去獲得某個方向的燈時,每次獲得的都是同一個執行個體對象,所以Lamp類改用枚舉來做。永遠都只有代表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);    //12盞燈(對面燈,下一盞燈,燈的狀態)       private boolean lighted;    private String opposite;    private String next;        private Lamp(String opposite,String next,boolean lighted){//建立燈的時候就要設定燈的參數        this.opposite = opposite;        this.next = next;        this.lighted = lighted;    }    public boolean isLighted(){//燈的狀態        return lighted;    }    public void light(){//點亮燈,同時點亮對方的燈        this.lighted = true;        if(opposite != null){            Lamp.valueOf(opposite).light();        }        System.out.println(name()+"lamp is gree, 下面總共應該有6個方向能看到汽車穿過");    }    public Lamp blackOut(){//把燈黑掉,同時也黑掉對面燈,又把下一盞燈點亮並返回出點亮的燈        this.lighted = false;        if(opposite != null){            Lamp.valueOf(opposite).blackOut();        }        Lamp nextLamp = null;        if(next != null){            nextLamp = Lamp.valueOf(next);            nextLamp.light();        }        return nextLamp;    }設計一個LampController類,它定時讓當前的綠燈變紅。}public class LampController {    private Lamp currentLamp; //把燈傳進來        public LampController(){//在建構函式裡就把一組燈點亮,在建立一個定時器,每個10秒把自己黑了,在把下一組燈點亮        currentLamp = Lamp.S2N;        currentLamp.light();        ScheduledExecutorService timer = Executors.newScheduledThreadPool(1);        timer.scheduleAtFixedRate(                new Runnable(){
            @Override            public void run() {                currentLamp = currentLamp.blackOut();            }                                },                10,                10,                TimeUnit.SECONDS);            }在建立一個類來測試一下public class MainClass {    public static void main(String[] args){        String[] directions = new String[]{            "S2N", "S2W", "E2W", "E2S","N2S", "N2E", "W2E", "W2N","S2E", "E2N", "N2W", "W2S"//將12盞燈放進一個數組中        };        for (int i = 0; i < directions.length; i++) {//建立12條路,並把燈放在每條路中            new Road(directions[i]);        }                new LampController();//建立燈的控制器,開始工作    }}交通燈我學到的就是這些了----------- android培訓、java培訓、java學習型技術部落格、期待與您交流! ------------

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.