java_交通灯(黑马程序员)

------- 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培训、期待与您交流! ----------

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
项目:使用AngularJs编写的简单 益智游戏(附源代码)  这是一个简单的 javascript 项目。这是一个拼图游戏,也包含一个填字游戏。这个游戏玩起来很棒。有两个不同的版本可以玩这个游戏。你也可以玩填字游戏。 关于游戏 这款游戏的玩法很简单。如上所述,它包含拼图和填字游戏。您可以通过移动图像来玩滑动拼图。您还可以选择要在滑动面板中拥有的列数和网格数。 另一个是填字游戏。在这里你只需要找到浏览器左侧提到的那些单词。 要运行此游戏,您需要在系统上安装浏览器。下载并在代码编辑器中打开此项目。然后有一个 index.html 文件可供您修改。在命令提示符中运行该文件,或者您可以直接运行索引文件。使用 Google Chrome 或 FireFox 可获得更好的用户体验。此外,这是一款多人游戏,双方玩家都是人类。 这个游戏包含很多 JavaScript 验证。这个游戏很有趣,如果你能用一点 CSS 修改它,那就更好了。 总的来说,这个项目使用了很多 javascript 和 javascript 库。如果你可以添加一些具有不同颜色选项的级别,那么你一定可以利用其库来提高你的 javascript 技能。 演示: 该项目为国外大神项目,可以作为毕业设计的项目,也可以作为大作业项目,不用担心代码重复,设计重复等,如果需要对项目进行修改,需要具备一定基础知识。 注意:如果装有360等杀毒软件,可能会出现误报的情况,源码本身并无病毒,使用源码时可以关闭360,或者添加信任。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值