1. 程式人生 > >黑馬程式設計師----7k面試題之交通燈管理系統

黑馬程式設計師----7k面試題之交通燈管理系統

畫圖非常有助於分析和理解問題。

十字路總共有12條線路,為了統一程式設計模型,可以假設每條線路都有一個紅綠燈對其進行控制,

右拐的四條線路假設稱為常綠狀態,另外,其他的8條兩兩成對的,可以歸為4組,

所以程式只需考慮途中標註了數字號的4條線路的控制燈的切換順序,

這四條路線的反方向的路線控制燈跟隨這四條線路切換,不必另行考慮。

Road類的編寫

import java.util.*;import java.util.concurrent.*;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++) {                  try {                     //隨機
10秒內新增一輛車
                       Thread.sleep((new Random().nextInt(10) + 1) * 1000);                   } catch (InterruptedException e) {                     e.printStackTrace();                }                 vechicles.add(Road.this.name + "_" + i);            }         }     });       // 每隔一秒檢查對應的燈是否為綠,是則放行一輛車
       Executors.newScheduledThreadPool(1).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);}}

Lamp類的編寫

分析見面向物件分析

/**每個Lamp元素代表一個方向上的燈,總共有12個方向,所以總格有12Lamp元素。* @author DOOLMO**/public enum Lamp {     /*每個列舉元素各表示一個方向的控制燈*/         S2N("N2S",false,"S2W"),S2W("N2E",false,"E2W"),   E2W("W2E",false,"E2S"),E2S("W2N",false,"S2N"),     /*下面元素表示與上面的元素的相反方向的燈,所有引數相反方向燈下一個燈應忽略不計!*/     N2S(null,false,null),N2E(null,false,null),   W2E(null,false,null),W2N(null,false,null),     /*由南向東和由東向北等右拐彎的燈不受紅綠燈的控制,所以,可以假想它們總是綠燈*/     S2E(null,true,null),E2N(null,true,null),   N2W(null,true,null),W2S(null,true,null);           /*燈是否為綠*/         private boolean lighted;     /*與燈同時為綠的對應方向*/         private String opposite;     /*燈變紅時下一個變綠的燈*/         private String next;   private Lamp(String opposite,boolean lighted,String next){            this.opposite =opposite;            this.lighted =lighted;            this.next = 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個方向能看到汽車穿過!");                 }           /**      * 燈變紅時,對應方向的燈也要變紅,並且下一個方向的燈要變綠      * @return 下一個要變綠的燈      */       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();                    System.out.println("綠燈從" + name() + "-------->切換為" + next);                          }            return nextLamp;     }  }  

LampController類的編寫

由於整個系統中只能有一套交通燈控制系統,所以,LampController類應該設計成單例。

 LampController構造方法中要設定第一個為綠的燈。

 LampController物件的start方法中將當前燈變綠,然後啟動一個定時器,每隔10秒將當前燈變紅和將下一個燈變綠。

import java.util.concurrent.*;public class LampController {  private Lamp currentLamp;   public LampController() {      // 剛開始讓由南向北的燈變綠;    currentLamp = Lamp.S2N;      currentLamp.light();    /* 每隔10秒將當前綠燈變為紅燈,並讓下一個方向的燈變綠 */    Executors.newScheduledThreadPool(1).scheduleAtFixedRate(new Runnable() {           public void run() {             System.out.println("來啊");              currentLamp = currentLamp.blackOut();         }     }, 10, 10, TimeUnit.SECONDS);  }}

Main類的編寫

package cn.itheima.traffic;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"             };         for(int i=0;i<directions.length;i++){             new Road(directions[i]);         }         new LampController();     }  

總結:

該面試題,主要考察對面向物件設計的熟練度,能使用多執行緒,列舉,還有就是對問題的分析和處理。

對能力的各方面進行的考察,java的基礎能力很重要。

------ android培訓java培訓、期待與您交流! ----------


相關推薦

黑馬程式設計師----7k試題交通管理系統

畫圖非常有助於分析和理解問題。 十字路總共有12條線路,為了統一程式設計模型,可以假設每條線路都有一個紅綠燈對其進行控制, 右拐的四條線路假設稱為常綠狀態,另外,其他的8條兩兩成對的,可以歸為4組, 所以程式只需考慮途中標註了數字號的4條線路的控制燈的切換順序, 這四條路線的反方向的路線控制燈跟隨

黑馬程式設計師-7k試題交通管理系統

---------------------- ASP.Net+Unity開發、.Net培訓、期待與您交流! ---------------------- 面試題要求: 1.非同步隨機生成按照各種路線行駛的車輛。例如:由南向而來去往北向的車輛--------直行車輛由西向

黑馬程式設計師_7k試題交通管理系統

交通燈管理系統 1. 模擬實現十字路口的交通燈管理系統邏輯,具體需求如下:非同步隨機生成按照各個路線行駛的車輛。例如:由南向而來去往北向的車輛---- 直行車輛由西向而來去往南向的車輛---- 右轉車輛由東向而來去往南向的車輛---- 左轉車輛        ......        訊號燈忽略黃燈,只考

黑馬程式設計師__7K試題交通管理系統

---------------------- Android開發、java培訓、期待與您交流! ---------------------- 一.需求 模擬實現十字路口的交通燈管理系統邏輯,具體需求如下: 1.非同步隨機生成按照各個路線行駛的車輛。 例如:       

黑馬程式設計師-----7K試題交通系統

------<a href="http://www.itheima.com" target="blank">Java培訓、Android培訓、iOS培訓、.Net培訓</a>、期待與您交流! ------- 現在每晚都加大力度去學習和加強自己的J

黑馬程式設計師_7k試題交通管理系統)學習筆記

總共有12條路線,為了統一程式設計模型,可以假設每條路線都有一個紅綠燈對其進行控制,右轉彎的4條路線的控制燈可以假設稱為常綠狀態,另外,其他的8條線路是兩兩成對的,可以歸為4組,所以,程式只需考慮圖中標註了數字號的4條路線的控制燈的切換順序,這4條路線相反方向的路線的控制燈跟隨這4條路線切換,不必額外考慮

黑馬程式設計師_7K試題_交通管理系統

-面向物件分析設計經驗:誰用於資料,誰就對外提供操作這些資料的方法。 典型案例:      人在黑板上畫圓。 分析: 共有三個物件:人、黑板、圓。動作:畫 畫圓需要圓心和半徑,圓心和半徑都是圓的屬性上,圓擁有資料,所以圓物件提供畫圓的方法 圓在黑板上,黑板擁有

黑馬程式設計師_試題1(交通管理系統)

一.專案需求:                 模擬實現十字路口的交通燈管理系統邏輯:       非同步隨機生成按照各個路線行駛的車輛。       例如:       由南向而來去往北向的車輛 ---- 直行車輛       由西向而來去往南向的車輛 ---- 右

黑馬程式設計師_12_7k試題交通

---------------------- ASP.Net+Android+IOS開發、.Net培訓、期待與您交流! ----------------------  交通燈管理系統的專案需求: 非同步隨機生成按照各個路線行駛的車輛。 例如:由南來向北去的車輛——直

黑馬程式設計師_7K試題交通

   ------- <a href="http://www.itheima.com" target="blank">android培訓</a>、<a href="http://www.itheima.com" target="blank"&g

黑馬程式設計師_7K試題交通系統

                                            交通燈訊號模擬系統 一、概述 模擬實現十字路口的交通燈管理系統邏輯,具體需求如下:(需求直接來源於老師的文件) ①      非同步隨機生成按照各個路線行駛的車輛。 例如:      

黑馬程式設計師----------7K試題交通管理

 ------<a href="http://www.itheima.com" target="blank">Java培訓、Android培訓、iOS培訓、.Net培訓</a>、期待與您交流! -------                  

黑馬程式設計師_7k試題銀行業務排程系統

----------- android培訓、java培訓、java學習型技術部落格、期待與您交流! --------- 一.專案需求: 模擬實現銀行業務排程系統邏輯,具體需求如下: 銀行內有6個業務視窗,1 - 4號視窗為普通視窗,5號視窗為快速

黑馬程式設計師---7k試題(銀行業務排程系統

號碼管理器 publicclassNumberManager{ privateint lastNumber =0;//客戶數 privateList queueNumbers =newArrayList();//視窗叫號數 publicsynchronizedInteger generateN

黑馬程式設計師7k試題交通

 交通燈專案需求: 模擬實現十字路口的交通燈管理系統邏輯,具體需求如下:         非同步隨機生成按照各個路線行駛的車輛。 例如:        由南向而來去往北向的車輛 ---- 直行車輛        由西向而來去往南向的車輛 ---- 右轉車輛       

黑馬程式設計師--7k試題交通

package com.itheima.traffic; import java.beans.VetoableChangeSupport; import java.util.ArrayList; import java.util.List; import java.util.Random; import j

黑馬程式設計師——7K試題交通(My)

  ------- android培訓、java培訓、期待與您交流! ---------- 模擬實現十字路口的交通燈管理系統邏輯,具體需求如下: 1、非同步隨機生成按照各個路線行駛的車輛。 例如:        由南向而來去往北向的車輛 ---- 直行車輛      

黑馬程式設計師——7k試題——交通管理系統

需求如下: 非同步隨機生成按照各個路線行駛的車輛。 訊號燈只考慮紅綠燈 要考慮左轉車輛控制訊號燈,右轉車輛不受訊號燈控制 具體訊號燈控制邏輯與顯示生活中交通控制邏輯上相同 每量車共過路口為1秒 隨機生成車輛時間間隔及紅綠燈交換時間間隔自定,可設定 不用GUI,用log展現

黑馬程式設計師——7k試題---交通

------<a href="http://www.itheima.com" target="blank">Java培訓、Android培訓、iOS培訓、.Net培訓</a>、期待與您交流! ------- 交通燈管理系統 一、功能需求如下: 1、

黑馬程式設計師 7K試題破解:交通管理系統

---------------------- ASP.Net+Android+IOS開發、.Net培訓、期待與您交流! ---------------------- 交通燈管理系統 使用者需求 模擬實現十字路口的交通燈管理系統邏輯,具體需求如下:        非同步