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

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

---------------------- ASP.Net+Unity開發.Net培訓、期待與您交流! ----------------------

面試題要求:

1.非同步隨機生成按照各種路線行駛的車輛。
例如:
由南向而來去往北向的車輛--------直行車輛
由西向而來去往南向的車輛--------右轉車輛
由東向而來去往南向的車輛--------左轉車輛
。。。。。

2.訊號燈忽略黃燈,只考慮紅燈和綠燈

3.應考慮左轉車輛控制訊號燈,右轉車輛不受訊號的控制

4.具體訊號燈控制邏輯與現實生活中普通交通燈控制邏輯相同,不考慮特殊情況下的控制邏輯
注:南北向車輛與東西向車輛交替放行,同方向等待車輛應先放行直行車輛後放行左轉車輛


5.每輛車通過路口時間為1秒(可通過sleep的方法模擬)

6.隨機生成車輛時間間隔以及紅綠燈交換時間間隔自定,可以自行設定

7.不要求實現GUI,只考慮系統邏輯實現,可通過LOG方式展現程式執行結果

程式設計思想:
用S,N,E,W分別表示南,北,東,西方向,S2N代表由南往北的訊號燈,餘下依次類推。來考慮一個完整的訊號燈迴圈:
1.S2N亮,由南向而來去往北向的直行車輛通行,同時四個方向的右轉車輛通行。
2.接著S2W亮,S2N滅,由南向而來去往西向的左轉車輛通行,同時四個方向的右轉車輛通行。
3.接著E2W亮,S2W滅,由西向而來去往東向的直行車輛通行,同時四個方向的右轉車輛通行。
4.接著E2S亮,E2W滅,由西向而來去往北向的左轉車輛通行,同時四個方向的右轉車輛通行。

。。。。。。
我們發現S2N-N2S,S2W-N2E,E2W-W2E,E2S-W2N是一一對應的,另外四個控制因為是控制右轉車輛的,不考慮。
因此只需控制S2N,S2W,E2W,E2S四個燈的亮滅即可。

//產生車輛的工廠,每輛車都對應有一個唯一的車牌號

<span style="font-family:KaiTi_GB2312;font-size:18px;">public class vechiclesCenter 
{
	private static int lastNumber = 0;
	private static vechiclesCenter instance = new vechiclesCenter();
	
	public static  vechiclesCenter getCarCenter()
	{
		return instance;
	}
	
	public int incCar()
	{
		return (++lastNumber);
	}	
}</span>

//定義一個列舉,用於表示12個燈的狀態
<span style="font-family:KaiTi_GB2312;font-size:18px;">public enum Lamp 
{
	S2N("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),

	S2E(null,null,true),E2N(null,null,true),N2W(null,null,true),W2S(null,null,true);
	
	private String opposition,next; //對面燈和下一個燈的列舉物件名字
	private boolean lighted;	//表示燈的亮滅狀態
	
	private Lamp(String oppsotion,String next,boolean lighted)  //建構函式,每個物件都對應有對面燈,下一個燈和燈的狀態
	{
		this.opposition = oppsotion;
		this.next = next;
		this.lighted = lighted;
	}
	
	//得到燈的狀態
	public boolean isLighted() 
	{
		return lighted;
	}
	
	//將當前燈便綠
	public void light()
	{
		this.lighted = true; 	//將當前燈的lighted 置為true
		if(this.opposition != null)	//判斷opposition變數是否為null,否則會陷入死迴圈
		{
			Lamp.valueOf(opposition).light();
		}
		System.out.println(name() +" 綠了,現在有6個方向上的車正在通行!!");
	}
	
	//將當前變紅,同時將下一個燈變綠
	public Lamp blackOut()
	{
		this.lighted = false; //將當前燈的lighted 置為false
		if(this.opposition != null)
		{
			Lamp.valueOf(this.opposition).blackOut();
		}		
		
		Lamp nextTmpString = null;
		if(this.next != null)
		{
			nextTmpString = Lamp.valueOf(this.next);  //得到下一個燈的列舉物件
			System.out.println("綠燈方向轉向了 "+ this.next);
			nextTmpString.light();			//將下一個燈變綠
		}
		
		return nextTmpString;
	}
}</span>

//該類根據為每個方向上的道路建立兩個執行緒,第一個執行緒按隨機間隔時間新增往這個方向上通行的車輛,第二個執行緒按照1s時間間隔判斷這個方向上的交通燈狀態。並且建立一個存放該通行該路線的車輛的容器
<span style="font-family:KaiTi_GB2312;font-size:18px;">public class Road
{
	private List<String> carList = new ArrayList<String>(); //存放車輛的容器
	private String name = null;                //該路線對應的方向名稱
	Road(String name) 
	{
		this.name  = name;         
		Executors.newSingleThreadExecutor().execute(new Runnable()   //該執行緒負責不斷往容器中新增車輛
		{
			public void run()
			{
				while(true)
				{
					try 
					{
						Thread.sleep((new Random().nextInt(10)+1)*1000);  //新增車輛前睡眠一個隨機時間,模擬不斷到來的隨機車輛
						carList.add(Road.this.name+" 方向上的"+vechiclesCenter.getCarCenter().incCar()+"車"); //往容器中新增車輛
					} 
					catch (Exception e) 
					{
						e.printStackTrace();
					}
				}

			}
		});
		
		Executors.newScheduledThreadPool(1).scheduleAtFixedRate(    //該執行緒每隔一秒時間檢查該線路的燈的情況。
				new Runnable() 
				{

					public void run()
					{
						if(carList.size() > 0)  //如果該方向上有車輛要通行
						{
							if(Lamp.valueOf(Road.this.name).isLighted())  //如果該方向上的燈是綠的
							{
								System.out.println(carList.remove(0)+" 正在通行");  //從容器中取出一輛車模擬該車在該路線上通行
							}
						}
					}
				}, 
				1, 
				1, 
				TimeUnit.SECONDS);
	}
}</span>

//該類控制交通燈的狀態進行迴圈,先將S2N變綠,建立一個執行緒每隔10秒點亮當前燈的下一個燈
<span style="font-family:KaiTi_GB2312;font-size:18px;">public class LampCtroller
{
	private Lamp currentLamp;
	public LampCtroller() 
	{
		currentLamp = Lamp.S2N;
		currentLamp.light();
		Executors.newScheduledThreadPool(1).scheduleAtFixedRate(
				new Runnable()
				{

					public void run() 
					{
						System.out.println("come on!!!");   
						currentLamp.blackOut();   //將滅掉當前燈,並點亮下一個燈
					}
				},
				10, 
				10, 
				TimeUnit.SECONDS);
	}
}</span>

//測試
<span style="font-family:KaiTi_GB2312;font-size:18px;">public class MainClass 
{	
	public static void main(String[] args)
	{
		String[] roadsStrings = {"S2N","S2W","E2W","E2S","N2S","N2E","W2E","W2N","S2E","E2N","N2W","W2S"}; //12個等對應的列舉物件的名字
		for(int i=0; i<roadsStrings.length; i++)
			new Road(roadsStrings[i]);         //根據燈名,分別啟動一個執行緒往相應的方向上增加車輛
		new LampCtroller();			   //啟動一個執行緒控制燈的狀態
	}

}</span>

程式執行部分結果:

N2S 綠了,現在有6個方向上的車正在通行!!
S2N 綠了,現在有6個方向上的車正在通行!!
W2S 方向上的4 號車 正在通行
S2E 方向上的7 號車 正在通行
N2S 方向上的6 號車 正在通行
E2N 方向上的10 號車 正在通行
N2W 方向上的8 號車 正在通行
S2N 方向上的11 號車 正在通行
N2S 方向上的9 號車 正在通行
N2W 方向上的17 號車 正在通行
come on!!!
綠燈方向轉向了 S2W
N2E 綠了,現在有6個方向上的車正在通行!!
S2W 綠了,現在有6個方向上的車正在通行!!
S2W 方向上的3 號車 正在通行
N2E 方向上的2 號車 正在通行
N2E 方向上的16 號車 正在通行
S2W 方向上的21 號車 正在通行
N2E 方向上的20 號車 正在通行
W2S 方向上的22 號車 正在通行
N2W 方向上的24 號車 正在通行
S2E 方向上的27 號車 正在通行
E2N 方向上的29 號車 正在通行
W2S 方向上的28 號車 正在通行
S2E 方向上的32 號車 正在通行
S2W 方向上的33 號車 正在通行
W2S 方向上的36 號車 正在通行
N2E 方向上的37 號車 正在通行
come on!!!
綠燈方向轉向了 S2W
N2E 綠了,現在有6個方向上的車正在通行!!
S2W 綠了,現在有6個方向上的車正在通行!!
S2E 方向上的47 號車 正在通行
E2N 方向上的43 號車 正在通行
N2W 方向上的45 號車 正在通行
W2S 方向上的44 號車 正在通行
S2W 方向上的46 號車 正在通行
N2W 方向上的48 號車 正在通行
N2W 方向上的49 號車 正在通行

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

---------------------- ASP.Net+Unity開發.Net培訓、期待與您交流! ----------------------詳細請檢視:www.itheima.com

相關推薦

黑馬程式設計師----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培訓、期待與您交流! ---------------------- 交通燈管理系統 使用者需求 模擬實現十字路口的交通燈管理系統邏輯,具體需求如下:        非同步