黑马程序员 交通灯管理系统
2013-12-26 23:39
387 查看
---------------------- ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------
面向对象分析:
1.设计一个Road类来代表线路,共有12条线路,需要实例化12个Road类对象。
Road属性:String name 用于表示线路名称。
List<String> vehicles 用于存放在该线路的车辆。
构造方法:1,通过构造方法设置线路名称
2,给vehicles添加元素,表示该线路增加车辆
3,判断该线路交通灯,当交通灯为绿,每隔一秒减少vehicles的第一个元素,表示通过一辆车。
代码实现:
package com.itheima.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> vehicles = 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 =1;i<1000;i++){
try {
Thread.sleep((new Random().nextInt(10)+1)*1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
vehicles.add(Road.this.name+"_"+i);
}
} }); ScheduledExecutorService timer =Executors.newScheduledThreadPool(1);
timer.scheduleAtFixedRate(
new Runnable(){
public void run(){
if(vehicles.size()>0){
boolean light = Lamp.valueOf(Road.this.name).islighted(); if(light){
System.out.println(vehicles.remove(0)+"通过");
}
}
}
},
1,
1,
TimeUnit.SECONDS); } }
2,设计一个枚举类Lamp,共有12个实例,用于表示12条线路的交通灯 属性:boolean light 用于表示交通灯状态,红或绿 String opposite 用于表示该交通灯对应的灯 String next 用于表示交通灯切换的下一个灯 方法:boolean islighted() 判断该交通灯的状态,true为绿 false为红 void Green() 将该交通灯和与之对应的灯设置为绿灯状态 Lamp Red() 将该交通灯设置为红灯状态并且把要切换的灯设置为绿灯状态并返回被切换的灯Lamp实例。 代码实现:
package com.itheima.traffic;
public 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 Lamp(String opposite,String next,boolean light){
this.opposite = opposite;
this.next = next;
this.light = light;
} private boolean light;
private String opposite;
private String next;
public boolean islighted(){
return light;
}
public void Green(){
this.light=true;
if(opposite!=null){
Lamp.valueOf(opposite).Green();
}
System.out.println(name()+"为绿灯");
}
public Lamp Red(){
this.light =false;
if(opposite!=null){
Lamp.valueOf(opposite).Red();
}
Lamp lampNext=null;
if(next!=null){
lampNext = Lamp.valueOf(next);
System.out.println("绿灯由"+name()+"切换为"+next);
lampNext.Green(); } return lampNext; }
}
3,设计LampControl类用于控制交通灯 属性:Lamp current 当前被设置的交通灯实例 构造方法:将S2N设置为当前交通灯并将其设置为绿灯 每隔10秒将当前灯设置为红灯并且将当前灯改为需要切换的下一个灯。 代码实现:
package com.itheima.traffic;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
public class LampControl {
Lamp current;
public LampControl(){
current = Lamp.S2N;
current.Green();
ScheduledExecutorService timer= Executors.newScheduledThreadPool(1);
timer.scheduleAtFixedRate(
new Runnable(){
public void run(){
current=current.Red();
}
},
10,
10,
TimeUnit.SECONDS);
}
}
4,设计主函数类MainClass
主函数内创建12个Road对象,创建LampControl类对象控制交通灯,运行程序
代码实现:
package com.itheima.traffic;
public class MainClass {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
String [] directions = new String[]{
"S2N","S2W","E2W","E2S","N2S","N2E","W2E","W2N","S2E","E2N","N2W","W2S"
};
for(int i = 0; i < directions.length;i++){
new Road(directions[i]);
} new LampControl(); }
} ---------------------- ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------
面向对象分析:
1.设计一个Road类来代表线路,共有12条线路,需要实例化12个Road类对象。
Road属性:String name 用于表示线路名称。
List<String> vehicles 用于存放在该线路的车辆。
构造方法:1,通过构造方法设置线路名称
2,给vehicles添加元素,表示该线路增加车辆
3,判断该线路交通灯,当交通灯为绿,每隔一秒减少vehicles的第一个元素,表示通过一辆车。
代码实现:
package com.itheima.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> vehicles = 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 =1;i<1000;i++){
try {
Thread.sleep((new Random().nextInt(10)+1)*1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
vehicles.add(Road.this.name+"_"+i);
}
} }); ScheduledExecutorService timer =Executors.newScheduledThreadPool(1);
timer.scheduleAtFixedRate(
new Runnable(){
public void run(){
if(vehicles.size()>0){
boolean light = Lamp.valueOf(Road.this.name).islighted(); if(light){
System.out.println(vehicles.remove(0)+"通过");
}
}
}
},
1,
1,
TimeUnit.SECONDS); } }
2,设计一个枚举类Lamp,共有12个实例,用于表示12条线路的交通灯 属性:boolean light 用于表示交通灯状态,红或绿 String opposite 用于表示该交通灯对应的灯 String next 用于表示交通灯切换的下一个灯 方法:boolean islighted() 判断该交通灯的状态,true为绿 false为红 void Green() 将该交通灯和与之对应的灯设置为绿灯状态 Lamp Red() 将该交通灯设置为红灯状态并且把要切换的灯设置为绿灯状态并返回被切换的灯Lamp实例。 代码实现:
package com.itheima.traffic;
public 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 Lamp(String opposite,String next,boolean light){
this.opposite = opposite;
this.next = next;
this.light = light;
} private boolean light;
private String opposite;
private String next;
public boolean islighted(){
return light;
}
public void Green(){
this.light=true;
if(opposite!=null){
Lamp.valueOf(opposite).Green();
}
System.out.println(name()+"为绿灯");
}
public Lamp Red(){
this.light =false;
if(opposite!=null){
Lamp.valueOf(opposite).Red();
}
Lamp lampNext=null;
if(next!=null){
lampNext = Lamp.valueOf(next);
System.out.println("绿灯由"+name()+"切换为"+next);
lampNext.Green(); } return lampNext; }
}
3,设计LampControl类用于控制交通灯 属性:Lamp current 当前被设置的交通灯实例 构造方法:将S2N设置为当前交通灯并将其设置为绿灯 每隔10秒将当前灯设置为红灯并且将当前灯改为需要切换的下一个灯。 代码实现:
package com.itheima.traffic;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
public class LampControl {
Lamp current;
public LampControl(){
current = Lamp.S2N;
current.Green();
ScheduledExecutorService timer= Executors.newScheduledThreadPool(1);
timer.scheduleAtFixedRate(
new Runnable(){
public void run(){
current=current.Red();
}
},
10,
10,
TimeUnit.SECONDS);
}
}
4,设计主函数类MainClass
主函数内创建12个Road对象,创建LampControl类对象控制交通灯,运行程序
代码实现:
package com.itheima.traffic;
public class MainClass {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
String [] directions = new String[]{
"S2N","S2W","E2W","E2S","N2S","N2E","W2E","W2N","S2E","E2N","N2W","W2S"
};
for(int i = 0; i < directions.length;i++){
new Road(directions[i]);
} new LampControl(); }
} ---------------------- ASP.Net+Android+IOS开发、.Net培训、期待与您交流! ----------------------
相关文章推荐
- JAVA面试精选
- Java面试题集(86-115)
- 给将入职场或刚入职场的人的几个建议
- 转自MITBBS. peking2 面试题总结
- 黑马程序员_WinForm基础(二)
- 奋斗不止 自强不息:职场话题之跳槽(二)—如何准备跳槽
- 程序员该有的艺术气质—SOLID原则
- 黑马程序员 银行业务调度系统
- 【程序员的吐槽】八一八那些让你感觉蠢哭了的BUG
- 建行数据中心
- 黑马程序员 集合框架二
- 黑马程序员—多线程的两种创建方式与多线程安全问题
- 黑马程序员《java基础总结(三)》(面向对象特点--继承)
- 黑马程序员---JAVA---编程题(五)
- 黑马程序员---JAVA基础---数组(四)
- 黑马程序员---JAVA基础---函数(三)
- 优秀程序员的6个共同特质
- 我是怎么用FullCalendar记录我的2013年(辞职N次,面试2N次)的,它还兼容IE6
- 职场新人的2013年总结
- 告别码农,成为真正的程序员