天天看點

黑馬程式員-java 7K面試題之交通燈管理系統

-------

、、期待與您交流!

--------

交通燈管理系統

模拟實作十字路口的交通燈管理系統邏輯,具體需求如下:

1. 異常随機生成按照各個路線行駛的車輛。

   例如:

   由南向而來去往北向的車輛----直行車輛

   由西向而來去往南向的車輛----右轉車輛

   由東向而來去往南向的車輛----左轉車輛

   .......  ......

2. 信号燈忽略黃燈,隻考慮紅燈和綠燈。

3. 應該考慮左轉車輛控制信号燈,右轉車輛不受信号燈控制。

4. 具體信号燈控制邏輯與現實生活中普通交通燈控制邏輯相同,不考慮特殊情況下的控制邏輯。

    注:南北向車輛與東西向車輛交替放行,同方向等待車輛應先放行直行車輛再放行左轉車輛。

5. 每輛車通過路口時間為1秒(可通過線程sleep的方式模拟)。

6. 随機生成車輛時間間隔,可以設定紅綠燈交換時間間隔。

7. 不要求實作GUI,隻考慮系統邏輯實作,可通過log方式展現程式運作結果。

直接畫圖方式來展示路線情況,直覺清晰:

黑馬程式員-java 7K面試題之交通燈管理系統

說明:

總共有12條路線,為了統一程式設計模型,可以假設每條路線都有一個紅綠燈對其進行控制,右轉彎的4條路線的控制燈可以假設稱為常綠狀态;

其他的8條線路是兩兩成對的,可以歸為4組,是以,程式隻需考慮圖中标注了數字号的4條路線的控制燈的切換順序,這4條路線相反方向的路線的控制燈跟随這4條路線切換,不必額外考慮。

面向對象的分析與設計

面向對象設計的一個重要經驗是:誰擁有資料,誰就對外提供操作這些資料的方法。幾個典型案例是:

人在黑闆上畫圓 ---------人、黑闆、圓,畫這個方法屬于圓

列車司機緊急刹車--------- 司機、車,刹車方法屬于車

售票員統計收貨發票的金額 --------- 售貨員,發票,統計金額方法屬于發票

人關門 --------- 人,門,關這個方法屬于門

兩塊石頭磨成一把石刀,石刀可以砍樹,砍成木材,木材做成椅子 --------- 石頭,石刀工廠(傳入石頭,傳回石刀),石刀(砍樹方法,傳入樹,傳回木材),樹,木材,椅子,椅子工廠(傳入木材,傳回椅子)。

球從繩子的一端移動到了另一端 --------- 球(移動),繩子(根據一個端點擷取下一個端點)

交通燈管理系統面向對象的分析與設計

1.每條路線上都會出現多輛車,路線上要随機增加新的車,在燈綠期間還要每秒鐘減少一輛車。

設計一個Road類來表示路線,每個Road對象代表一條路線,總共有12條路線,即系統中總共要産生12個Road執行個體對象。 每條路線上随機增加新的車輛,增加到一個集合中儲存。 每條路線每隔一秒都會檢查控制本路線的燈是否為綠,是則将本路線儲存車的集合中的第一輛車移除,即表示車穿過了路口。

2.每條路線每隔一秒都會檢查控制本路線的燈是否為綠,一個燈由綠變紅時,應該将下一個方向的燈變綠。

設計一個Lamp類來表示一個交通燈,每個交通燈都維護一個狀态:亮(綠)或不亮(紅),每個交通燈要有變亮和變黑的方法,并且能傳回自己的亮黑狀态。 總共有12條路線,是以,系統中總共要産生12個交通燈。右拐彎的路線本來不受燈的控制,但是為了讓程式采用統一的處理方式,故假設出有四個右拐彎的燈,隻是這些燈為常亮狀态,即永遠不變黑。 除了右拐彎方向的其他8條路線的燈,它們是兩兩成對的,可以歸為4組,是以,在程式設計處理時,隻要從這4組中各取出一個燈,對這4個燈依次輪詢變亮,與這4個燈方向對應的燈則随之一同變化,是以Lamp類中要有一個變量來記住自己相反方向的燈,在一個Lamp對象的變亮和變黑方法中,将對應方向的燈也變亮和變黑。每個燈變黑時,都伴随者下一個燈的變亮,Lamp類中還用一個變量來記住自己的下一個燈。 無論在程式的什麼地方去獲得某個方向的燈時,每次獲得的都是同一個執行個體對象,是以Lamp類改用枚舉來做顯然具有很大的友善性,永遠都隻有代表12個方向的燈的執行個體對象。 設計一個LampController類,它定時讓目前的綠燈變紅。

編寫交通燈管理系統代碼

1.定義Road類

  每個Road對象代表一條路線,總共有12條路線,即系統中總共要産生12個Road執行個體對象。

  每條路線上随機增加新的車輛,增加到一個集合中儲存。

  每條路線每隔一秒都會檢查控制本路線的燈是否為綠,是則将本路線儲存車的集合中的第一輛車移除,即表示車穿過了路口。

2.定義交通燈類Lamp。

每個Lamp元素代表一個方向上的燈,總共有12個方向,所有總共有12個Lamp元素。

有如下一些方向上的燈,每兩個形成一組,一組燈同時變綠或變紅,是以,

程式代碼隻需要控制每組燈中的一個燈即可:

s2n,n2s    

s2w,n2e

e2w,w2e

e2s,w2n

s2e,n2w

e2n,w2s

上面最後兩行的燈是虛拟的,由于從南向東和從西向北、以及它們的對應方向不受紅綠燈的控制,是以,可以假想它們總是綠燈。

3.定義交通燈控制類LampController

4.定義主類MainClass,測試程式的運作

------- 、、期待與您交流! --------



繼續閱讀