黑馬程式設計師_Java學習筆記之7K面試題交通等管理系統
7K面試題—交通燈管理系統
交通都能管理系統專案需求
模擬十字路口的交通燈管理系統邏輯,具體需求如下
1. 非同步隨機生成按照各個路線行駛的車輛,例如:
由南向而來去往北向的車輛------直行車輛
由西向而來去往南向的車輛------右轉車輛
由東向而來去往南向的車輛------左轉車輛
①垂直向上。
②垂直向左拐。
③水平從東往西。
④從東往南。
2. 訊號燈忽略黃燈,只考慮紅燈和綠燈。
3. 應考慮左轉車輛受訊號燈控制,右轉車輛不受訊號燈控制。
4. 具體訊號燈控制邏輯與現實中的普通交通燈控制邏輯相同,不考慮特殊情況下的控制邏輯。注:南北向車輛與東西向車輛交替放行,同放行等待車輛應先放行直線車輛,而後放行左轉車輛。如上圖所示,若南往北綠燈(線路①S2N),北往南也為綠燈。當線路①為紅燈時,N2S也為紅燈,此時線路2(S2W)為綠燈。若東往西為綠燈(路線③E2W),西往東也為綠燈,當這兩個方向為紅燈後,線路④(E2S)為綠燈。
面向物件的思想剖析
設想一下有哪些物件:紅綠燈,紅綠燈的控制系統,汽車,路線。汽車看到自己所在路線對應的綠燈就穿過路口嗎?不是,還需要看起前面是否有車輛,看前面是否有車,該文哪個物件呢?該問路,路中儲存著車輛的集合,顯然路中應該有增加車輛和減少車輛的方法。再看題目,這裡並不需要體現車輛移動的過程,只是捕捉出車輛穿過馬路的過程,也就是捕捉路上車輛減少的過程,所以,這個車並不需要單獨設計成一個物件,用一個字串表示即可。所以,有3個物件:路、紅綠燈、紅綠燈控制系統。
面向物件把握的一個重要的經驗:誰擁有資料,誰就對外提供操作這些資料的方法。
交通燈控制系統的類的實現分析
每條路線上都會出現多輛車,路線上要隨機增加新的車,在燈綠期間還要每秒鐘減少一輛車。
設計一個Road類來表示路線,每個Road物件代表一條路線,總共有12條路線,即系統中總共要產生12個Road例項物件。
每條路線上隨機增加新的車輛,增加到一個集合中儲存。
每條路線每隔一秒都會檢查控制本路線的燈是否為綠,是則將本路線儲存車的集合中的第一輛車移除,即表示車穿過了路口。
每條路線每隔一秒都會檢查控制本路線的燈是否為綠,一個燈由綠變紅時,應該將下一個方向的燈變綠。
設計一個Lamp類來表示一個交通燈,每個交通燈都維護一個狀態:亮(綠)或不亮(紅),每個交通燈要有變亮和變黑的方法,並且能返回自己的亮黑狀態。
總共有12條路線,所以,系統中總共要產生12個交通燈。右拐彎的路線本來不受燈的控制,但是為了讓程式採用統一的處理方式,故假設出有四個右拐彎的燈,只是這些燈為常亮狀態,即永遠不變黑。
除了右拐彎方向的其他8條路線的燈,它們是兩兩成對的,可以歸為4組,所以,在程式設計處理時,只要從這4組中各取出一個燈,對這4個燈依次輪詢變亮,與這4個燈方向對應的燈則隨之一同變化,因此Lamp類中要有一個變數來記住自己相反方向的燈,在一個Lamp物件的變亮和變黑方法中,將對應方向的燈也變亮和變黑。每個燈變黑時,都伴隨者下一個燈的變亮,Lamp類中還用一個變數來記住自己的下一個燈。
無論在程式的什麼地方去獲得某個方向的燈時,每次獲得的都是同一個例項物件,所以Lamp類改用列舉來做顯然具有很大的方便性,永遠都只有代表12個方向的燈的例項物件。
設計一個LampController類,它定時讓當前的綠燈變紅。
編寫Road類中模擬汽車上路的程式碼
* 每個Road物件代表一條路線,總共有12條路線,即系統中總共要產生12個Road例項物件。
* 每條路線上隨機增加新的車輛,增加到一個集合中儲存。
* 每條路線每隔一秒都會檢查控制本路線的燈是否為綠,是則將本路線儲存車的集合中的第一輛車移除,即表示車穿過了路口。
public class Road {// 路上的車輛
private List<String> vehiches = new ArrayList<String>();
private String name = null;//每條路線的名稱
public Road(String name) {
this.name = name;
//建立執行緒池
ExecutorService pool =Executors.newSingleThreadExecutor();
//執行任務,即從執行緒池中選擇一個空閒執行緒執行該任務
pool.execute(new Runnable() {
publicvoid run() {
//生成1000輛車
for(int i = 1; i <= 1000; i++) {
try {
//每隔隨機的1~10秒鐘,new Random().nextInt(10)返回0~9之間的隨機數
//也就是每隔1~10秒鐘隨機生成一輛車
Thread.sleep((new Random().nextInt(10)+1) * 1000);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//Road.this.name表示外部類Road的成員變數,
vehiches.add(Road.this.name+"_"+i);
}
}
});
//定時器
ScheduledExecutorService timer= Executors.newScheduledThreadPool(1);
timer.scheduleAtFixedRate(
new Runnable() {
publicvoid run() {
//如果有車輛
if(vehiches.size() > 0) {
boolean lighter = Lamp.valueOf(Road.this.name).isLighted();
//假如燈是綠燈
if(lighter) {
System.out.println(vehiches.remove(0)+" is traversing !");
}
}
}
},
1, //經過1秒之後執行(執行鄰上面的Runnable內部類裡中內容)
1, //再過1秒接著執行
TimeUnit.SECONDS);//度量單位為:秒,表示上面的兩個 1的單位都是秒鐘
}
// 路上的車輛
private List<String> vehiches = new ArrayList<String>();
private String name = null;//每條路線的名稱
public Road(String name) {
this.name = name;
//建立執行緒池
ExecutorService pool =Executors.newSingleThreadExecutor();
//執行任務,即從執行緒池中選擇一個空閒執行緒執行該任務
pool.execute(new Runnable() {
publicvoid run() {
//生成1000輛車
for(int i = 1; i <= 1000; i++) {
try {
//每隔隨機的1~10秒鐘,new Random().nextInt(10)返回0~9之間的隨機數
//也就是每隔1~10秒鐘隨機生成一輛車
Thread.sleep((new Random().nextInt(10)+1) * 1000);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//Road.this.name表示外部類Road的成員變數,
vehiches.add(Road.this.name+"_"+i);
}
}
});
相關推薦
黑馬程式設計師_Java學習筆記之7K面試題交通等管理系統
------- <a href="http://www.itheima.com" target="blank">android培訓</a>、<a href="http://www.itheima.com" target="blank">
黑馬程式設計師——7k面試題——交通燈管理系統
需求如下: 非同步隨機生成按照各個路線行駛的車輛。 訊號燈只考慮紅綠燈 要考慮左轉車輛控制訊號燈,右轉車輛不受訊號燈控制 具體訊號燈控制邏輯與顯示生活中交通控制邏輯上相同 每量車共過路口為1秒 隨機生成車輛時間間隔及紅綠燈交換時間間隔自定,可設定 不用GUI,用log展現
黑馬程式設計師_Java學習日記2_面向物件總結1
----------------------android培訓、java培訓、期待與您交流! --------------------- 1.關於main函式的講解 主函式,是一個特殊的函式,作為程式的入口,可以被jvm呼叫。 主函式的定義: public:代表該函式的許
黑馬程式設計師_Java學習日記25_高新技術4
----------------------android培訓、java培訓、期待與您交流! --------------------- 泛型 1.入門泛型的基本應用 JDK1.5的集合類希望你在定義集合時,明確表示你要向集合中儲存哪種型別的資料,無法加入指定型別以外的
黑馬程式設計師 C#學習筆記⑥ 三層架構基礎實現員工資訊管理
---------------------- ASP.Net+Unity開發、.Net培訓、期待與您交流! ---------------------- 三層架構定義 1、表現層(UIL):通俗講就是展現給使用者的介面,即使用者在使用一個系統的時候他的所見所得。 2、業
黑馬程式設計師--Java學習日記之面向物件(封裝,繼承和構造方法)
------- android培訓、java培訓、期待與您交流! ---------- 面向物件思想: 面向過程,以函式為基礎,關注的是實現過程; 面向物件,以物件為基礎,關注的是最終結果; 面向物件思想特點 是一種更符合我們思想習慣的思想
黑馬程式設計師-OC學習筆記-----記憶體管理
移動裝置的記憶體極其有限,每個app所能佔用的記憶體是有限制的.當app所佔用的記憶體較多時,系統會發出記憶體警告,這時得回收一些不需要再使用的記憶體空間。比如回收一些不需要使用的物件、變數等。基本的資料型別是放在記憶體的棧裡面,這是不需要我們去管理的,系統會自動回收。但是
黑馬程式設計師 C#學習筆記⑤ 省市縣三級聯動查詢
---------------------- ASP.Net+Unity開發、.Net培訓、期待與您交流! ----------------------詳細請檢視:www.itheima.com 實現一個可以動態的進行省市縣查詢的程式 一 基本原理: 通過ADO.NET技
黑馬程式設計師_學習筆記JAVA基礎總結
1、方法過載 方法覆蓋 過載:一個類中一種功能的多種實現方式,呼叫哪種實現方式,根據呼叫者給出的引數。有兩個或多個方法方法名相同,但是引數型別或者引數個數或者引數順序不同。覆蓋:子類重寫父類的一個函式,函式名,引數,返回型別都相同。 覆蓋的應用: 當子類需要父
黑馬程式設計師--JQuery學習筆記
---------------------- <a href="http://edu.csdn.net"target="blank">ASP.Net+Android+IOS開發</a>、<a href="http://edu.csdn.net
黑馬程式設計師-IOS學習筆記(二)常用關鍵字和方法
------Java培訓、Android培訓、iOS培訓、.Net培訓、期待與您交流!------- 常用關鍵字和方法: 一.記憶體管理情況 1- autorelease,當用戶的程式碼在持續執行時,自動釋放池是不會被銷燬的,這段時間內使用者可以安全地使用自動釋放的物件。當
黑馬程式設計師 反射學習筆記
----------android培訓、java培訓、java學習型技術部落格、期待與您交流!---------- 反射: “反射就是把Java類中的各種成分對映成相應的java類”,而在此之前,首先是必須獲得類的Class物件,再呼叫Class的相關方法,獲取例項類中
黑馬程式設計師--Java學習日記之GUI&網路程式設計
------- android培訓、java培訓、期待與您交流! ---------- GUI 如何建立一個視窗並顯示 Graphical User Interface(圖形使用者介面)。
黑馬程式設計師-OC學習筆記-點方法、成員變數作用域以及set方法和get方法@property的綜合題
------<a href="http://www.itheima.com" target="blank">Java培訓、Android培訓、iOS培訓、.Net培訓</a>、期待與您交流! ------- 1. OC建立物件的拓展: Frac
黑馬程式設計師--Java學習日記之基礎知識(思維導圖&基礎概念)
------- android培訓、java培訓、期待與您交流! ---------- 什麼是常量 在程式執行的過程中其值不可以發生改變 Java中常量的分類
黑馬程式設計師——C語言筆記之資料型別與常量
------- android培訓、java培訓、iOS培訓、.Net培訓、期待與您交流! ---------- 1、什麼是資料型別 資料型別是指資料以何種方式儲存在記憶體中,不同的型別儲存方
黑馬程式設計師------面試題------交通燈管理系統
------- <a href="http://www.itheima.com" target="blank">android培訓</a>、<a href="http://www.itheima.com" target="blank">
黑馬程式設計師_java基礎加強學習筆記之註解
------- <a href="http://www.itheima.com" target="blank">android培訓</a>、<a href="http://www.itheima.com" target="blank">j
黑馬程式設計師_java基礎學習筆記之(建構函式&構造程式碼塊&靜態程式碼塊)的區別
在基礎學習中,我常常會概念模糊,特作此學習筆記,進行一下對比,思路自然就清晰了。 建構函式 建構函式定義:建構函式是與類名相同,但沒有返回值的函式。 例子: class Person { //建構函式 public Person() {} } 作用:
黑馬程式設計師之----------7K面試題之交通燈管理
------<a href="http://www.itheima.com" target="blank">Java培訓、Android培訓、iOS培訓、.Net培訓</a>、期待與您交流! -------