------- android培训、java培训、期待与您交流! ----------
交通的灯的题目就不多叙述了,我们来看项目:
首先我们要分析要面向对象编程的对象是谁?分析可知:有灯,路,灯的控制器!这三了所以我们也主要写这三个类!
首先来写road,关于road的你要注意你需要把车辆编程你的内部对象,可以用一个集合来模拟车辆的产生,当然你要写的东西包括车辆的产生器和车辆的消失器也是就是说车辆的行驶走后,你要删除它!所以根据这一点来看我们在road的构造函数中写一个生成方法!在写一个取消方法。如下
public class road {
private List<String> car = new ArrayList<String>();//用于存储车辆
private String name = null;
public road( String name)
{
this.name = name;
ExecutorService pool = Executors.newSingleThreadExecutor();//开启一个新的线程
pool.execute(new Runnable(){//用于每有1s生成车辆
@Override
public void run() {
for(int i = 0;i < 1000;i++)
{
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
car.add(road.this.name+"-->"+i);
}
}
});
ScheduledExecutorService timer = Executors.newScheduledThreadPool(1);
timer.scheduleAtFixedRate(//用于删除车辆!并打印信息is run
new Runnable()
{
@Override
public void run() {
if(car.size()>0)
{
if(Lamp.valueOf(road.this.name).isLighted())
System.out.println(car.remove(0)+"is run");
}
}
},
1,
1,
TimeUnit.SECONDS);
}
}
我们的road就写好了,当然这样的road中有线程池的建立,和利用exectors来写一个定时器,主要的东西还是逻辑!
下面我们就来写一个Lamp类。Lamp主要是灯的一些方法,其中包括:灯的状态判断!灯的开启,灯的关闭!
其中要注意的是当我们开启一盏灯的时候要注意他的对应方向的灯应该是和他一样的状态!
而且他的对立方向是和他不同的状态!所以要尤其注意!
public enum Lamp {
//建立了灯的12个对象
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 oppsite;//灯的对立灯
private String next;//不同方向的灯
private Lamp(String oppsite,String next,boolean lighted)//初始化灯
{
this.oppsite = oppsite;
this.next = next;
this.lighted=lighted;
}
public boolean isLighted()//判断灯的状态
{
return lighted;
}
public void light()//把灯变亮,并且注意他的对立面
{
lighted = true;
if(oppsite != null)//这里设计的巧妙,有效地避免了死循环!
{
Lamp.valueOf(oppsite).light();
}
}
public Lamp blackOut()//把灯变暗,注意对立和不同方向
{
this.lighted = false;
if(oppsite != null)
{
Lamp.valueOf(oppsite).blackOut();
}
Lamp nextlamp = Lamp.valueOf(next);
if(next != null)
{
nextlamp.light();
}
return nextlamp;
}
}
j接着就是灯的控制器了!控制器主要是管理灯的变换,每一秒就变换一次!
public class lampCtroller {
private Lamp currentLamp;//当前亮着的灯
public lampCtroller()
{
currentLamp = Lamp.S2N;
this.currentLamp.light();
ScheduledExecutorService timer = Executors.newScheduledThreadPool(1);
timer.scheduleAtFixedRate(//每隔一秒就变换灯的状态
new Runnable()
{
@Override
public void run() {
currentLamp = currentLamp.blackOut();
}
},
1,
1,
TimeUnit.SECONDS);
}
}
主函数为:
public static void main(String[] args) {
// TODO Auto-generated method stub
String[] myroad = new String[]{"S2N","S2W","E2W","E2S",
"N2S","N2E","W2E","W2N",
"S2E","E2N","N2W","W2S"};
for(int i= 0 ;i < myroad.length;i++)
{
new road(myroad[i]);
}
new lampCtroller();
}
所以交通灯还是主要分析逻辑的:
首先主函数创建了12灯的状态,
接着主函数会调用方法创建车辆的够着函数,开始创建车并且添加到集合中去!并随着时间判断灯的状态去删除车辆。
并循环持续创建完12个状态的车后。
然后开启灯的控制器。
系统就开始运行了,我们可以看到,当判断灯为亮的时候集合中的car会remove并且相对方向的灯亮!所以
这样就成了循环系统了!
------- android培训、java培训、期待与您交流! ----------