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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

张老师面试题讲解——交通信号灯

發(fā)布時(shí)間:2023/12/20 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 张老师面试题讲解——交通信号灯 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

?------- android培訓(xùn)、java培訓(xùn)、期待與您交流! ----------

?

今天看了張老師的這個(gè)面試題講解才感覺到自己在一個(gè)什么水平,繼續(xù)努力學(xué)習(xí),還需不斷提升自己的能力!

繼續(xù)學(xué)習(xí)鞏固一些知識(shí),對(duì)線程池的認(rèn)識(shí)以及對(duì)定時(shí)器的熟練掌握。各個(gè)知識(shí)點(diǎn)融會(huì)貫通才能成為一名優(yōu)秀的程序員。

?

交通信號(hào)燈題目及要求

1.異步隨機(jī)生成按照各個(gè)路線行駛的車輛。

例如:

???????由南向而來(lái)去往北向的車輛?----?直行車輛

???????由西向而來(lái)去往南向的車輛?----?右轉(zhuǎn)車輛

???????由東向而來(lái)去往南向的車輛?----?左轉(zhuǎn)車輛

???????。。。

2.?信號(hào)燈忽略黃燈,只考慮紅燈和綠燈。

3.?應(yīng)考慮左轉(zhuǎn)車輛控制信號(hào)燈,右轉(zhuǎn)車輛不受信號(hào)燈控制。

4.具體信號(hào)燈控制邏輯與現(xiàn)實(shí)生活中普通交通燈控制邏輯相同,不考慮特殊情況下的控制邏輯。

注:南北向車輛與東西向車輛交替放行,同方向等待車輛應(yīng)先放行直行車輛而后放行左轉(zhuǎn)車輛。

5. 每輛車通過(guò)路口時(shí)間為1秒(提示:可通過(guò)線程Sleep的方式模擬)。

6. 隨機(jī)生成車輛時(shí)間間隔以及紅綠燈交換時(shí)間間隔自定,可以設(shè)置。

7. 不要求實(shí)現(xiàn)GUI,只考慮系統(tǒng)邏輯實(shí)現(xiàn),可通過(guò)Log方式展現(xiàn)程序運(yùn)行結(jié)果。

畫圖分析:

分析對(duì)象,原則:誰(shuí)擁有數(shù)據(jù),誰(shuí)就對(duì)外提供操作這些數(shù)據(jù)的方法。

路對(duì)象:

通過(guò)線程時(shí)間隨機(jī)地產(chǎn)生汽車并存入集合眾,跟據(jù)交通信號(hào)燈的變化移除汽車。

燈對(duì)象:

圖中共有12條路線 , 就可以看作為12個(gè)固定的交通燈 ,由于每次都是在操作同一對(duì)象, 所以運(yùn)用用Enum枚舉類就更加方便。,
由于向右拐彎是不受燈控制的 , 所以4條右轉(zhuǎn)彎的燈一直為綠(true) ,? 在剩下的8條路線中 , 路線是兩兩對(duì)應(yīng)的? , S2N-N2S , S2W-N2E ,W2E-E2W , E2S-W2N , 并且第一組燈變紅(false)時(shí) , 第二組燈就變綠(true) , 依次往復(fù) , 這樣就明確的燈的對(duì)應(yīng)和交替關(guān)系 。

信號(hào)燈控制器:

添加定時(shí)器,控制紅綠燈變化。

路的代碼:

import java.util.ArrayList; import java.util.List; import java.util.Random; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit;public class Road {private List<String> vehicles = new ArrayList<String>(); //創(chuàng)建集合,用來(lái)存放產(chǎn)生的汽車String roadName = null;Road(String roadName){ //路的構(gòu)造方法this.roadName = roadName; ExecutorService pool = Executors.newSingleThreadExecutor(); //學(xué)習(xí)Executors類,創(chuàng)建獨(dú)立線程。Java1.5 pool.execute(new Runnable(){ //匿名內(nèi)部類@Overridepublic void run() {for(int i=1; i<1000; i++){try {Thread.sleep((new Random().nextInt(10)+1)*1000); //} catch (InterruptedException e) {e.printStackTrace();}//把車放進(jìn)集合中vehicles.add(Road.this.roadName+"_"+i); //外部類的局部變量的訪問(wèn)方式:外部類名.this.變量名 }}});ScheduledExecutorService timer = Executors.newScheduledThreadPool(1); //定義一個(gè)計(jì)劃的線程池,線程的數(shù)量為1//創(chuàng)建并執(zhí)行此線程池,初始可以定時(shí)、并且后續(xù)具有周期性的方法.//用于當(dāng)交通燈為綠色時(shí),移出當(dāng)前路上的車輛timer.scheduleAtFixedRate(new Runnable(){@Overridepublic void run() {if(vehicles.size()!=0){ boolean lighted = Lamp.valueOf(Road.this.roadName).isLighted();if(lighted){System.out.println(vehicles.remove(0)+" is traversing");}}} },1,1,TimeUnit.SECONDS);} }

信號(hào)燈:

public enum Lamp {//前四個(gè)燈為主控?zé)?括號(hào)內(nèi)傳入的分別是,"對(duì)應(yīng)的燈","下一個(gè)燈",燈默認(rèn)值S2N("N2S","S2W",false),S2W("N2E","E2W",false),E2W("W2E","E2S",false),E2S("W2N","S2N",false),//中間四個(gè)燈為上面四個(gè)燈所對(duì)應(yīng)的燈,并受其控制N2S(null,null,false),N2E(null,null,false),W2E(null,null,false),W2N(null,null,false),//后四個(gè)為右轉(zhuǎn)彎的燈,為常綠狀態(tài)S2E(null,null,true),E2N(null,null,true),N2W(null,null,true),W2S(null,null,true);private Lamp(String opposite,String next,boolean lighted){this.opposite = opposite;this.next = next;this.lighted = lighted;}private boolean lighted;private String opposite;private String next;public boolean isLighted(){ //判斷燈的狀態(tài)return lighted;}//燈變綠方法public void light(){this.lighted = true;if(opposite != null){Lamp.valueOf(opposite).light();}System.out.println(this.name()+"lamp is green");}//燈變紅方法public Lamp lightOff(){this.lighted = false;if(opposite != null){Lamp.valueOf(opposite).lightOff();}System.out.println(next);Lamp nextLamp = null;if(next != null){System.out.println("綠燈由"+name()+"變成"+next); nextLamp = Lamp.valueOf(next);//System.out.println("test");nextLamp.light();}return nextLamp;} }

信號(hào)燈控制器:

public class LampController {private Lamp currentLamp = null;public LampController(){currentLamp = Lamp.S2N; //定義初始變綠方向的燈currentLamp.lightOn();ScheduledExecutorService timer = Executors.newScheduledThreadPool(1); //添加定時(shí)器,根據(jù)實(shí)際邏輯紅綠燈不斷交替timer.scheduleAtFixedRate(new Runnable(){public void run(){currentLamp = currentLamp.lightOff(); //lightOff返回下一個(gè)當(dāng)前狀態(tài)等}},10, 10,TimeUnit.SECONDS);} }

編寫住方法實(shí)現(xiàn)功能:

public class MainClass {public static void main(String[] args) {String[] roadNames = new String[]{"S2N","S2W","E2W","E2S","N2S","N2E","W2E","W2N","S2E","E2N","N2W","W2S"};for(String roadName : roadNames){new Road(roadName);}new LampController();} }





?

?

總結(jié)

以上是生活随笔為你收集整理的张老师面试题讲解——交通信号灯的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。