黑马程序员--第九篇--交通灯管理系统

ASP.Net+Android+IOS开发.Net培训期待与您交流!

首先应该看明白人家给的题目要求,看到这个题目,首先得注意两点:

1:十字路口有十二条方向的车辆


"N2S","N2E","S2N","S2W","E2W","E2S","W2E","W2N","N2W","S2E","E2N","W2S"

2:右转车辆不受灯信号控制

仔细分析,从N往S和从S往N的一样,考虑一条就可以,同样从东西方向的车辆,又去除右转向的,共分析四条线路即可。S2N,S2W,E2W,E2S即可。

3:该怎样划分程序,对象是哪个?这里一个面向对象分析重要的经验就是:谁拥有数据,谁就拥有处理这些数据的方法。比如人开门,我点灯等等。在这里,应该分为红绿灯,红绿灯控制系统三个类,车当成字符串。

package com.softstone.interview.traffic;

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
import java.util.Random;
public class Road {
	//把路当成一个装各种车字符串的集合
	//面向接口编程,这样让面试官看见比较好
	//包名起人家公司的网址比较好,哈哈
	private List<String> vechicles = new ArrayList<String>();
	private String name;
	public Road(String name){
		this.name = name;
		//生成一个含有一个线程的执行器
		ExecutorService pool = Executors.newSingleThreadExecutor();
		pool.execute(new Runnable(){
			public void run(){
				for(int i=0;i<1000;i++){
					try{//线程休眠1到10秒
						Thread.sleep((new Random().nextInt(10)+1)*1000);
					}catch(InterruptedException e){
						e.printStackTrace();
					}
					//路上加车
					vechicles.add(Road.this.name+"_"+i);//访问外部类的成员变量,Road.this.name  S2W1代表从南往西的第一辆车
				}
			}
		});
		//下面是定时器,每隔一段时间运行一次线程
		// Executors.newScheduledThreadPool(1)new出一个含有一个线程的线程池
		ScheduledExecutorService  timer = Executors.newScheduledThreadPool(1);
		timer.scheduleAtFixedRate(new Runnable(){//以固定频率运行线程
			public void run(){
				if(vechicles.size()>0){
					boolean lighted = Lamp.valueOf(Road.this.name).isLighted();
					if(lighted){
						System.out.println(vechicles.remove(0)+"is traversing");//返回第一辆车
					}
				}
			}
		},
				1,//延迟一秒
				1,//时间为一秒
				TimeUnit.SECONDS);//计时单位为妙
	}
	
	
}
package com.softstone.interview.traffic;

public enum Lamp {
	N2S(null,null,false),N2E(null,null,false),S2N("N2S","S2W",false),S2W("N2E","E2W",false),
	E2S("W2N","S2N",false),E2W("W2E","E2S",false),W2N(null,null,false),W2E(null,null,false),
	N2W(null,null,true),S2E(null,null,true),E2N(null,null,true),W2S(null,null,true);
	
	private String opposite;
	private boolean lighted;
	private String next;
	
	//看是否变亮
	public void light(){
		this.lighted = true;
		if(opposite != null){
			Lamp.valueOf(opposite).light();
		}
		System.out.println(name()+"lamp is green 下面总共应该看到有6个方向的汽车穿过");
	}
	
	public Lamp blackOut(){
		this.lighted = false;
		if(opposite != null){
			Lamp.valueOf(opposite).blackOut();
		}
		
		Lamp nextLamp = null;
		if(next != null){
			nextLamp = Lamp.valueOf(next);
			System.out.println("绿灯从"+name()+"------>切换为"+next);
			nextLamp.light();
		}
		return nextLamp;
	}
	//对面的灯的状态,灯将要转变的状态,是否亮
	private Lamp(String opposite,String next,boolean lighted){
		this.opposite = opposite;
		this.next = next;
		this.lighted = lighted;
	}
	private Lamp(){}
	
	public boolean isLighted(){
		return lighted;
	}
	
}

package com.softstone.interview.traffic;

import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;

public class LampController {
	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);
	}
}
package com.softstone.interview.traffic;

public class MainClass {
	
	public static void main(String[] args) {
		String[] dirs = new String[]{
				"N2S","N2E","S2N","S2W","E2W","E2S","W2E","W2N","N2W","S2E","E2N","W2S"
		};
		for(String str:dirs){
			//new出每个路
			 new Road(str);
		}
		//启动红绿灯执行系统
		new LampController();
	}

}

ASP.Net+Android+IOS开发.Net培训期待与您交流!


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值