日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

黑马程序员_7k面试题之交通灯

發布時間:2024/1/1 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 黑马程序员_7k面试题之交通灯 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ------- android培訓、java培訓、java學習型技術博客、期待與您交流! ----------


? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 7k面試題之交通燈

1 ? ?題目要求

模擬實現十字路口的交通燈管理系統邏輯,具體有以下需求

1).?異步隨機生成按照各個路線行駛的車輛

舉例說明如下:

[1].?南向北行駛的車輛?----直行車輛

[2].?西向南行駛的車輛?----右轉車輛

[3].?東向南行駛的車輛?----左轉車輛

2).?信號燈顏色選擇范圍

忽略黃燈,只考慮紅燈和綠燈

3).?左轉車輛和右轉車輛的要求

[1].?左轉車輛受到控制信號燈的控制

[2].?但是右轉車輛不受信號燈控制

【注意】具體信號燈控制邏輯與現實生活中普通交通燈控制邏輯相同,不考慮特殊情況下的控制邏輯。

4).?其他說明

[1].?南北向車輛與東西向車輛交替放行,同方向等待車輛應先放行直行車輛而后放行左轉車輛。

[2].?每輛車通過路口時間為1秒(提示:可通過線程Sleep的方式模擬)。

[3].?隨機生成車輛時間間隔以及紅綠燈交換時間間隔自定,可以設置。

[4].?不要求實現GUI,只考慮系統邏輯實現,可通過Log方式展現程序運行結果。

2 ? ?題意分析

路口分析以及簡化

(1).?十字路口線路圖


(2).?圖例和相關術語

[1].?方向簡寫

N?--->北?S?--->南??E--->東??W?--->西

[2].?“2”是英文單詞“to”的意思

e.g.?N2S表示從北到南的線路

[3].?對應線路

{1}.?一條線路和他的對應線路可以同時放行的時候,不會出現兩條線路上的車輛的相互撞車的事件。

{2}.?這里面將一條線路的對應線路在后面用“()”括起來。

{3}.?圖中顏色相同的線路表示一對對應線路

[4].?圖中線路的分類

這個十字路口中一共有12條線路存在,分成以下三類:

{1}.?右轉線路?(4)

圖中四個拐角的褐色線路。分別是:N2WW2SS2EE2N

{2}.?左轉線路?(4)

圖中兩條粉色和兩條紅色的線路。分別是:N2E(S2W)W2N(S2E)

{3}.?直行線路?(4)

圖中兩條綠色和兩條藍色的線路。分別是:?N2S(S2N)E2W(W2E)

[6].?線路的要求

{1}.?直行+左轉的8條線路必須遵守這條線路上的交通燈的指示進行運行和停止

{2}.?右轉的4條線路不用按照紅綠燈自由運行。

(2).?線路分析簡化設計思路

[1].?簡化原則

{1}.?這里總共有12條路線,因此每條路線作為一個對象存在。

{2}.?為了統一編程模型,可以假設每條路線都有一個紅綠燈對該條線路的車進行控制。

{3}.?其中右轉彎的4條路線的控制燈可以設為常綠狀態。

{4}.其他8條線路是兩兩成對的,可以歸為4組。

所以程序只需考慮圖中標注了數字的4條路線的控制燈的切換順序,這4條路線對應方向的路線的控制燈跟隨標記數字的4條路線切換,不必額外考慮

[2].?根據題目需求進行線路切換次序確定

{1}.?需求是南北向車輛與東西向車輛交替放行,同方向等待車輛應先放行直行車輛而后放行左轉車輛。

{2}.?線路簡化之后,只考慮了兩個方向出發的車:

{2}1.?S方向出發的車:S2WS2N這兩個方向的線路?----?要求是先放行直行再放行左轉,所以這里面是S2N先放行,S2W后放行

{2}2.?E方向出發的車:E2WE2S這兩個方向的線路?----?要求是先放行直行再放行左轉,所以這里面是E2W先放行,E2S后放行

{2}3.?S方向或者E方向那個開始都可以,因為這些線路的交通燈是循環切換的。因此這里面從S方向開始。

所以線路切換是

S2N1--->?S2W2--->?E2W3】?--->?E2S?4--->S2N1】?--->...循環

算上每條線路的對應線路,下面給出完整的線路切換是:

S2N(N2S)1--->?S2W(N2E)2--->?E2W(W2E)3】?--->?E2S(W2N)4--->S2N(N2S)1】?--->...循環

[3].?簡化之后的線路圖如下


這里面需要真實考慮的線路只有直行的2+?左轉的2條?(一共4條線路)

3.????面向對象的分析初步

1).?通過需求分析名詞,定義出類

(1).?類的提取

[1].?需求中出現的類:交通燈、線路、車輛

[2].?額外的類?(通過分析需求)

需求是車在線路上運行,運行的時候要觀察該條線路上的交通燈的顏色的變化。這個交通燈的顏色怎么切換?靠誰去切換?肯定不是交通燈自己切換,而是交通燈靠一個交通燈控制器去切換。------第四個類是:交通燈控制器

【總結】所需的類:交通燈、線路、車輛和交通燈控制器四個類

(2).?面向對象的分析與設計的原則

[1].?面向對象設計把握一個重要的經驗

分析的出來的哪個類有哪些數據,這個類就對外提供操作這些數據的方法。

【注意】數據就是指的是這個類的成員變量

[2].?從一個比較復雜的類,也就是字面上看著會有很多成員的類進行分析。因為這樣的類可以直接分析出來很多成員,有利于接下來對其他的類進行分析

[3].?每一個類進行兩件事情的分析

{1}.?分析這個類的成員變量

一定要分析需求,根據這個需求自行描繪出來這個事件發生的過程,在這個過程中分析出這個類可能的聚合或者包含的其他類的成員變量即可。

{2}.分析這個類的成員方法

根據分析出來的成員變量和包含需求事件發生的過程為這個類的對象添加需要對外訪問的方法。

【注意1】成員變量和成員方法絕對不是一下子就添加完成的,邊分析邊做項目,邊添加。

【注意2】就是每一個提取出來的類不一定必須要自定義一個單獨的類。如果Java的核心類庫有合適的類型匹配,那就可以直接選來使用。

3? ?交通燈類Lamp的程序編寫

1) 編寫過程中注意事項

(1). Lamp類應該采用枚舉更好

所有地方的交通燈都是一樣的,具有12個代表12條線路的交通燈,不會多也不會少,因此這種固定不變的類Lamp類采用JDK5的枚舉來做顯然具有很大的方便性

(2). 一對一的映射關系可以使用String類型來替代Lamp成員屬性

由于Lamp類中的表示對應線路的屬性和下一條切換線路的屬性都是一對一的關系,因此一一對一的關系可以采用String類型來簡化替代Lamp類聚合的表示對應的Lamp類的實例和表示下一條交通燈的Lamp類實例。

2). Lamp類代碼示例

(1).Lamp的點亮和滅掉交通燈的方法

增加讓Lamp變亮和變黑的方法:light和blackOut,對于S2N、S2W、E2W、E2N這四個方向上的Lamp對象,這兩個方法內部要讓相反方向的燈隨之變亮和變黑,blackOut方法還要讓下一個燈變亮。

(2). Lamp類示例代碼


package cn.isoftstone.interview.traffic;/*** 每個Lamp元素代表一個方向上的燈,總共有12個方向,所有總共有12個Lamp枚舉元素。 * 程序代碼只需要控制每組燈中的一個燈即可:----括號中的表示該線路的交通燈對應的線路的交通燈* S2N(N2S)、S2W(N2E)、 E2W(W2E)、 E2S(W2N) -----受紅綠燈控制的交通燈* S2E(N2W) 和E2N(W2S) -----不受紅綠燈控制的交通燈* @author XinmingZhang*/ public enum Lamp {//每個枚舉元素各表示一個線路方向上的控制燈//左轉的兩條主路+ 兩條直行線 ----初始化這些主路的燈光是滅的---RedS2N("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),//四條右拐的路 常綠 ---四個右轉彎方向的燈,因為其不受紅綠燈控制,所以可以假設它們總是綠燈N2W(null, null, true), W2S(null, null, true), S2E(null, null, true), E2N(null, null, true);//當前燈的狀態,是否為綠private boolean lighted =false; //當前線路交通燈的對應線路的交通燈private String opposite =null; //一對一 所以使用String的name替代//當前線路交通燈的被切換到下一個交通燈private String next =null; //一對一 所以使用String的name替代/*** 構造函數* @param opposite ----當前線路對應線路的交通燈的名字* @param next --------當前線路的下一條線路的交通燈的名字* @param lighted -----這條線路的交通燈初始化的時候被點亮(代表綠燈)*/private Lamp(String opposite, String next, boolean lighted){this.lighted =lighted;this.opposite =opposite;this.next =next;}/*** lighted屬性的Getter* @return---獲取當前線路的交通燈的狀態*/public boolean isLighted() {return lighted;}/*** 點亮該燈----點亮表示將燈變成綠色的* 某個燈變綠時,它對應方向的燈也要變綠*/public void light(){this.lighted =true;//同時要點亮對應路段的交通燈if(this.opposite !=null){LampoppositeLamp =Lamp.valueOf(opposite);oppositeLamp.light();}System.out.println(name()+" lamp is green, 下面可以看到6個方向看到汽車穿過!");}/*** 滅掉該燈----也就是將該路段的交通燈變紅* @return----返回下一站切換的路燈*/public Lamp blackOut(){//當前燈變紅,對應方向的燈也變紅this.lighted =false;//同時要滅掉對應路段的燈if(this.opposite !=null){LampoppositeLamp =Lamp.valueOf(opposite);oppositeLamp.blackOut();}//點亮下一對應的燈LampnextLamp =null;if(next !=null){nextLamp=Lamp.valueOf(next);nextLamp.light();System.out.println("綠燈從"+ name()+"--->切換為"+next);}return nextLamp;} }

3) ? 線路類Road程序編寫

?1?編寫過程中注意事項

(1). 刪除方法 ------代表車輛穿過這條線路

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

(2). 增加車輛和刪除車輛的方法簡化

這兩個方法僅僅被使用一次之后即可,不需要被其他的方法調用。因此簡化程序,就直接放入到Road類的構造方法即可。

(3). Road類構造方法設計思路

2 先設計成單線程的構造方法

先生成車(初始化成員對象)? ----> 在放行這些車寫成單線程程序如下:


public Road(Stringname){this.name =name;//隨機的時間間隔生成1000輛車for(int i=0; i<1000; i++){try {int randomTime =(newRandom().nextInt(10)+ 1)*1000;Thread.sleep(randomTime);this.vehichles.add(this.name+"_"+ i);} catch(InterruptedException e) {// TODOAuto-generated catch blocke.printStackTrace();}}//每隔一秒放行一輛車while(vehichles.size()>0){//1s放行一輛車try {Thread.sleep(1000);} catch(InterruptedException e) {e.printStackTrace();}//觀察是否可以通過這條路 ---- 觀察這條路上的對應的交通燈對應的狀態boolean lighted =Lamp.valueOf(this.name).isLighted();if(lighted){System.out.println(vehichles.remove(0)+" istraversing!");}} }







? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?------- android培訓、 java培訓、 java學習型技術博客、期待與您交流! ----------

總結

以上是生活随笔為你收集整理的黑马程序员_7k面试题之交通灯的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。