1. 程式人生 > >黑馬程式設計師_7k交通燈管理系統

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

package com.isoftstone.interview.traffic;
/*
 * 每個Lamp元素代表一個方向上的燈,總共有12個方向,所有總共有12個Lamp元素。
 * 有如下一些方向上的燈,每兩個形成一組,一組燈同時變綠或變紅,所以,
 * 程式程式碼只需要控制每組燈中的一個燈即可:
 * s2n,n2s 
 * s2w,n2e
 * e2w,w2e
 * e2s,w2n
 * s2e,n2w
 * e2n,w2s
 * 上面最後兩行的燈是虛擬的,由於從南向東和從西向北、以及它們的對應方向不受紅綠燈的控制,
 * 所以,可以假想它們總是綠燈。
 */
/*
* S2N,S2W,E2W,E2S, 
* N2S,N2E,W2E,W2N, 
* S2E,E2N,N2W,W2S;
* */
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 Lamp(){}
private Lamp(String oppositeLampName,boolean lighted,String nextLampName){
this.oppositeLampName=oppositeLampName;
this.lighted=lighted;
this.nextLampName=nextLampName;
}
/* 當前燈是否為綠 */
private boolean lighted;
/* 與當前燈同時為綠的對應方向 */
private String oppositeLampName;
/* 當前燈變紅時下一個變綠的燈 */
private String nextLampName;
/**
 * 返回燈的狀態
* */
public boolean isLighted(){
return lighted;
}
/** 
 * 某個燈變綠時,它對應方向的燈也要變綠 
 */ 
public void light(){
this.lighted=true;
if(oppositeLampName!=null){
Lamp.valueOf(oppositeLampName).light();
}
System.out.println(name() +" lamp is green,下面總共應該有6個方向能看到汽車穿過!");
}
/**
 * 某個燈變紅時,對應方向的燈也要變紅,並且下一個方向的燈要變綠
 * 
 * @return 下一個要變綠的燈
 */
public Lamp blackOut(){
this.lighted=false;
if(oppositeLampName!=null){
Lamp.valueOf(oppositeLampName).blackOut();
}
Lamp nextLamp =null;
if(nextLampName!=null){
nextLamp = Lamp.valueOf(nextLampName);
System.out.println("綠燈從"+ name() + "-------->切換為" + nextLampName);
nextLamp.light();
}
return nextLamp;
}
}
3)LampController類
a、整個系統中只能有一套交通燈控制系統,所以,LampController類最好是設計成單例。

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

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

原始碼如下:

package com.isoftstone.interview.traffic;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
public class LampController {
private Lamp currentLamp;
private LampController(){}
private static LampController controller = null;
public static LampController getInstran(){
if(controller==null){
synchronized (LampController.class) {
if(controller==null){
controller=new LampController();
return controller;
}
}
}
return controller;
}
public void start(){
//剛開始讓由南向北的燈變綠; 
currentLamp = Lamp.S2N;
currentLamp.light();
/*每隔10秒將當前綠燈變為紅燈,並讓下一個方向的燈變綠*/  
ScheduledExecutorService timer =Executors.newScheduledThreadPool(1);
timer.scheduleAtFixedRate(
new Runnable(){
@Override
public void run() {
currentLamp = currentLamp.blackOut();
}
}, 
10, 
10, 
TimeUnit.SECONDS);
}
}


4)MainClass

a、for迴圈創建出代表12條路線的物件。

b、接著創建出LampController物件。

原始碼如下:

package com.isoftstone.interview.traffic;
public class MainClass {
public static void main(String[] args) {
String [] directions = {
"S2N","S2W","E2W","E2S", 
"N2S","N2E","W2E","W2N", 
"S2E","E2N","N2W","W2S"};
for(int i=0;i<directions.length;i++){
new Road(directions[i]);
}
LampController.getInstran().start();
}
}


相關推薦

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

package com.isoftstone.interview.traffic; /* * 每個Lamp元素代表一個方向上的燈,總共有12個方向,所有總共有12個Lamp元素。 * 有如下一些方向上的燈,每兩個形成一組,一組燈同時變綠或變紅,所以, * 程式程式碼只需要控制每組燈中的一個

黑馬程式設計師——面試——交通管理系統

                             ---------- android培訓、java培訓、java學習型技術部落格、期待與您交流! ----------   交通燈管理系統的專案需求 模擬實現十字路口的交通燈管理系統邏輯,具體需求如下: 非同步

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

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

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

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

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

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

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

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

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

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

黑馬程式設計師 交通管理系統的分析與理解

----------android培訓、java培訓、java學習型技術部落格、期待與您交流!---------- 交通燈管理系統 需求說明 非同步隨機生成按照各個路線行駛的車輛。 例如: 由南向而來去往北向的車輛----直行車輛 由西向而來去往南向的車輛----右轉車

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

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

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

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

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

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

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

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

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

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

黑馬程式設計師——面試題破解(交通管理系統

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

黑馬程式設計師------交通管理系統

                                                                                      -------android培訓、java培訓、期待與您交流! ---------- 模擬實現十字路

黑馬程式設計師 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

黑馬程式設計師--java_交通系統程式碼思路分析

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

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

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

黑馬程式設計師_7K面試題之銀行排程系統

------- android培訓、java培訓、期待與您交流! ---------- 銀行業務排程系統 1. 模擬實現銀行業務排程系統邏輯,具體需求如下:銀行內有6個業務視窗,1 - 4號視窗為普通視窗,5號視窗為快速視窗,6號視窗為VIP視窗。有三種對應型別的客戶: