黑马程序员 java 面试之交通信号灯,黑马交通信号灯
分享于 点击 9397 次 点评:64
黑马程序员 java 面试之交通信号灯,黑马交通信号灯
----------- android培训、java培训、java学习型技术博客、期待与您交流! --------
/*
需求:交通灯。
分析:每条道路的车都只要看直行和左转。
所以,要考虑的道路就只有四条,其他的都一样。
道路上的车和灯都是在变化,可以定义定时器来完成。
*/
class Road
{
//每一条路可以看成一个集合,集合里有各种车,定时器每隔1秒产一辆车。
private List<String> list = new ArrayList<String>();
private name;
Road(String name)
{
this.name = name;
ExecutorService pool = Executors.newSigleThreadExecutor();
pool.execute(new Runnable(){
public void run()
{
for(int x = 0; x < 100 ; x++)
{
try
{
Thread.sleep((new Random().nextInt(10) + 1) * 1000);
}
catch (Exception e)
{
System.out.println(e.toString());
}
list.add(Road.this.name + "" + x);//启动一个线程,控制出现的车数。
}
}
});
ScheduledExecutorService timer = Executors.newScheduledThreadPool(1);//出现的间隔。
timer.scheduleAtFixedRate(
new Runnable()
{
public void run(){
if(list.size() > 0)
{
boolean light =Lamp.valueOf(Road.this.name).isLighted();
if(light)
System.out.println(list.remove(0)+ "cheleile");
}
}
},
1,
1,
TimeUnit.SECONDS)
}
}
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 boolean lighted;
private String opposite;
private String next;
private Lamp(){}
private Lamp(String opposite)
{
this.opposite = opposite;
}
private Lamp(String opposite,String next,boolean lighted)
{
this.opposite = opposite;
this.next = next;
this.lighted = lighted;
}
public boolean isLigthed()
{
return lighted;
}
public void light()//出现的灯。
{
this.lighted = true;
if(opposite != null)
Lamp.valueOf(opposite).light();//反向的灯。
}
public Lamp blackOut()//下一个灯。
{
this.lighted = false;
if(opposite != null)
Lamp.valueOf(opposite).blackOut();
Lamp nextLamp = null;
if(next != null)
nextLamp = Lamp.valueOf(next);
Lamp.valueOf(next).light();
return nextLamp;
}
}
class LampController //定时器,每隔10秒将当前灯变红和将下一个灯变绿。
{
private Lamp currentLamp;
public LampController()
{
currentLamp = Lamp.S2N;
currentLamp.light();
ScheduledExecutorService timer = Executors.newScheduledThreadPool(1);
timer.scheduleAtFixedRate(new Runnable()
{
public void run()
{
currentLamp = currentLamp.blackOut();
}
} ,
10,
10,
TimeUnit.SECONDS)
}
}
class Function //主程序入口。
{
public static void main(String[] args)
{
String[] dirRoads = {"S2N","S2W","E2W","E2S",
"N2S","N2E","W2E","W2N",
"S2E","E2N","N2W","W2S"};
for( String dirRoad : dirRoads)
new Road(dirRoad);
new LampController();
}
}
----------- android培训、java培训、java学习型技术博客、期待与您交流! -----------
相关文章
- 暂无相关文章
用户点评