黑馬程序員_交通燈管理系統

---------------------- android培訓java培訓、期待與您交流! ----------------------


交通燈管理系統

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

Ø 異步隨機生成按照各個路線行駛的車輛。

例如:

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

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

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

       。。。

Ø 信號燈忽略黃燈,只考慮紅燈和綠燈。

Ø 應考慮左轉車輛控制信號燈,右轉車輛不受信號燈控制。

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

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

Ø 每輛車通過路口時間爲1秒(提示:可通過線程Sleep的方式模擬)。

Ø 隨機生成車輛時間間隔以及紅綠燈交換時間間隔自定,可以設置。

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



答案:根據張孝祥老師的講解,自己改進並編碼

import java.util.ArrayList;
import java.util.List;
import java.util.Random;


public class Road {
String name = null;
List<String> vehicles = new ArrayList<String>();


Road(String name) {
this.name = name;
new Thread(new Runnable() {
@Override
public void run() {
for (int i = 1; i < 1000; i++) {
// 內部類訪問外部類的方法
vehicles.add(Road.this.name + "_" + i);
try {
Thread.sleep((new Random().nextInt(10) + 1) * 1000);
} catch (InterruptedException e) {
}
}
}
}).start();
new Thread(new Runnable() {
@Override
public void run() {
for (int i = 0; i < 1000; i++) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
Lamp lamp = Lamp.valueOf(Road.this.name);
if (vehicles.size() > 0)
if (lamp.isGreen) {
System.out.println(vehicles.remove(0)
+ " is running....." + "rest:"
+ vehicles.size());
}
}
}
}).start();
}
}


public enum Lamp {
W2E("E2W","W2N",false),W2N("E2S","S2N",false),S2N("N2S","S2W",false),S2W("N2E","W2E",false),
E2W(null,null,false),E2S(null,null,false),N2S(null,null,false),N2E(null,null,false),
W2S(null,null,true),S2E(null,null,true),E2N(null,null,true),N2W(null,null,true);


String oppositeLamp;
String nextLamp;
boolean isGreen;
private Lamp(String oppositeLamp, String nextLamp, boolean isGreen) {
this.oppositeLamp = oppositeLamp;
this.nextLamp = nextLamp;
this.isGreen = isGreen;
}

public void turnGreen(){
isGreen=true;
System.out.println(name()+"変緑");
if(oppositeLamp!=null){
Lamp.valueOf(oppositeLamp).turnGreen();
}
}

public void turnRed(){
isGreen=false;
System.out.println("轉換....");
if(oppositeLamp!=null){
Lamp.valueOf(oppositeLamp).turnRed();
}
}

public Lamp getNextLamp(){
Lamp next=null;
if(nextLamp!=null)
next=Lamp.valueOf(nextLamp);
return next;
}
public boolean isGreen(){
return isGreen;
}
}



public class LampController {
Lamp presentLamp;


LampController() {
presentLamp = Lamp.W2E;
new Thread(new Runnable() {
public void run() {
while (true) {
presentLamp.turnGreen();
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
e.printStackTrace();
}
presentLamp.turnRed();
presentLamp = presentLamp.getNextLamp();
}
}
}).start();
}
}



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



---------------------- android培訓java培訓、期待與您交流! ----------------------

詳細請查看:http://edu.csdn.net/heima

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章