-------<a href="http://www.itheima.com/"">android培训</a>、<a href="http://www.itheima.com/" ">java培训</a>期待与您交流!----------
黑马程序员_编写交通灯系统思路与感想
编写完面试题交通灯管理系统后,让我更是加深了对面向对象编程思想的认识。
总结一下自己在编写程序的经验。
首先要从现实生活中分析要编写的程序的需求与逻辑。然后根据分析的结果把其中涉及到的事务抽象成程序程序语言中的类。运用面向对象的思想把整个程序涉及的动作行为编写成方法放在与其对应的类中。
编写交通灯系统时,根据现实生活可以发现。每个十字路口都会设有四个方向的红绿灯。在不考虑黄灯的情况下。东西方向与南北方向的灯各为一组,亮灯的颜色依次交替变换、车辆根据红灯停绿灯行的原则通过路口。有一个特例,右转弯的车辆不用管红绿灯直接可以通过路口。
在分析完这些后,我的思路是。从中抽象出四个类
Car:行驶的车辆类
Road:路线类。
Lamp:红绿灯枚举,列出了四个方向的红绿灯
ContralOfTraffic:控制红绿灯类
ContralOfTraffic类控制四个红绿灯颜色的交替变化,car类根据其其前方的红绿灯颜色通过十字路口。
Road类不断增加车辆,并减掉义通过路口的车。
具体代码如下
package com.huawei.ithei.traffic;
/*
* 本枚举根据路上12种不同行车方向的车辆定义的车辆枚举。
* 有关于名字的构造方法。抽象方法,根据自己前方红绿灯是否为绿灯而决定是否
* 通过路口的isGo().
* 覆盖toString().
*/
public enum Car {
N2S("由北向南"){
@Override
public boolean isGo() {
// TODO Auto-generated method stub
return Lamp.S.lighted;
}
},
S2N("由南向北"){
@Override
public boolean isGo() {
// TODO Auto-generated method stub
return Lamp.N.lighted;
}},
W2E("由西向东"){
@Override
public boolean isGo() {
// TODO Auto-generated method stub
return Lamp.E.lighted;
}},
E2W("由东向西"){
@Override
public boolean isGo() {
// TODO Auto-generated method stub
return Lamp.W.lighted;
}},
N2E("由北向东"){
@Override
public boolean isGo() {
// TODO Auto-generated method stub
return Lamp.E.lighted;
}},
N2W("由北向西,右转弯"){
@Override
public boolean isGo() {
// TODO Auto-generated method stub
return true;
}},
S2W("由南向西"){
@Override
public boolean isGo() {
// TODO Auto-generated method stub
return Lamp.W.lighted;
}},
S2E("由南向东,右转弯"){
@Override
public boolean isGo() {
// TODO Auto-generated method stub
return true;
}},
W2N("由西向北"){
@Override
public boolean isGo() {
// TODO Auto-generated method stub
return Lamp.N.lighted;
}},
W2S("由西向南,右转弯"){
@Override
public boolean isGo() {
// TODO Auto-generated method stub
return true;
}},
E2N("由东向北,右转弯"){
@Override
public boolean isGo() {
// TODO Auto-generated method stub
return true;
}},
E2S("由东向南"){
@Override
public boolean isGo() {
// TODO Auto-generated method stub
return Lamp.S.lighted;
}
};
public String name=null;
private Car(String name){
this.name=name;
}
public abstract boolean isGo();
@Override
public String toString() {
// TODO Auto-generated method stub
return "行驶路线为"+name+"的车辆前方红绿灯是绿灯,安全通过";
}
}
package com.huawei.ithei.traffic;
/*
* 本类为交通灯类枚举。交通灯一共有四个方向的灯
* 就存在四个对象N S W E.有关于该灯是否为绿灯的构造方法。
* 抽象方法 改变自己灯与其对面方向灯的状态方法。
*
*/
public enum Lamp {
N(true){
@Override
public void changeLight() {
// TODO Auto-generated method stub
S.lighted=!(N.lighted);
N.lighted=S.lighted;
if(S.lighted){
System.out.println("南北方向是绿灯");
}
}},
S(true){
@Override
public void changeLight() {
// TODO Auto-generated method stub
N.lighted=!(S.lighted);
S.lighted=N.lighted;
}},
W(false){
@Override
public void changeLight() {
// TODO Auto-generated method stub
E.lighted=!(W.lighted);
W.lighted=E.lighted;
if(W.lighted){
System.out.println("东西方向是绿灯");
}
}},
E(false){
@Override
public void changeLight() {
// TODO Auto-generated method stub
W.lighted=!(E.lighted);
E.lighted=W.lighted;
}};
public boolean lighted;
private Lamp(boolean lighted){
this.lighted=lighted;
}
public abstract void changeLight();
}
package com.huawei.ithei.traffic;
import java.util.LinkedList;
import java.util.List;
import java.util.Random;
/*
* 本类定义了十字路口的路线。
* 该类中有一个集合用于存储与路线相应的
* 的Car.
* 类中的addCar()与deleteCar()是模拟该路线
* 车辆的增加与该路线车辆通过十字路口车辆的减少
*/
public class Road {
private String name;
public Road(String name) {
// TODO Auto-generated method stub
this.name = name;
}
public LinkedList<Car> list = new LinkedList<Car>();
public void addCar() {
new Thread() {
@Override
public void run() {
while (true) {
switch (name) {
//根据路线名添加相应行车方向的车辆
case "E2N":
list.offerLast(Car.E2N);
break;
case "E2S":
list.offerLast(Car.E2S);
break;
case "E2W":
list.offerLast(Car.E2W);
break;
case "N2E":
list.offerLast(Car.N2E);
break;
case "N2S":
list.offerLast(Car.N2S);
break;
case "N2W":
list.offerLast(Car.N2W);
break;
case "S2E":
list.offerLast(Car.S2E);
break;
case "S2N":
list.offerLast(Car.S2N);
break;
case "S2W":
list.offerLast(Car.S2W);
break;
case "W2E":
list.offerLast(Car.W2E);
break;
case "W2S":
list.offerLast(Car.W2S);
break;
default:
list.offerLast(Car.W2N);
break;
}
try {
Thread.sleep(new Random().nextInt(10) * 1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
};
}.start();
}
public void deleteCar(){
new Thread(){
//不断判断最前面的车辆的红绿灯是否为绿灯来删去路线上的车辆
@Override
public void run() {
while(true){
if(list.size()>0){
if(list.getFirst().isGo()){
Car car=list.removeFirst();
System.out.println(car);
}
}
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
};
}.start();
}
}
package com.huawei.ithei.traffic;
/*
* 本类为交通灯控制类。
* 由contralLighted()来每隔十秒钟将东西与南北的绿灯点亮。
*/
public class ContralOfTraffic {
publicvoid contralLighted(){
new Thread(){
@Override
public void run() {
while(true){
Lamp.N.changeLight();
Lamp.W.changeLight();
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
};
}.start();
}
}
运行结果为(一部分):
东西方向是绿灯
行驶路线为由北向东的车辆前方红绿灯是绿灯,安全通过
行驶路线为由南向东,右转弯的车辆前方红绿灯是绿灯,安全通过
行驶路线为由西向南,右转弯的车辆前方红绿灯是绿灯,安全通过
行驶路线为由南向西的车辆前方红绿灯是绿灯,安全通过
行驶路线为由东向西的车辆前方红绿灯是绿灯,安全通过
行驶路线为由东向北,右转弯的车辆前方红绿灯是绿灯,安全通过
行驶路线为由北向西,右转弯的车辆前方红绿灯是绿灯,安全通过
行驶路线为由西向东的车辆前方红绿灯是绿灯,安全通过
行驶路线为由北向东的车辆前方红绿灯是绿灯,安全通过
行驶路线为由南向东,右转弯的车辆前方红绿灯是绿灯,安全通过
行驶路线为由北向西,右转弯的车辆前方红绿灯是绿灯,安全通过
行驶路线为由东向北,右转弯的车辆前方红绿灯是绿灯,安全通过
行驶路线为由南向东,右转弯的车辆前方红绿灯是绿灯,安全通过
行驶路线为由西向东的车辆前方红绿灯是绿灯,安全通过
行驶路线为由西向东的车辆前方红绿灯是绿灯,安全通过
行驶路线为由北向西,右转弯的车辆前方红绿灯是绿灯,安全通过
行驶路线为由东向西的车辆前方红绿灯是绿灯,安全通过
行驶路线为由西向南,右转弯的车辆前方红绿灯是绿灯,安全通过
行驶路线为由西向东的车辆前方红绿灯是绿灯,安全通过
行驶路线为由北向东的车辆前方红绿灯是绿灯,安全通过
行驶路线为由南向东,右转弯的车辆前方红绿灯是绿灯,安全通过
行驶路线为由东向西的车辆前方红绿灯是绿灯,安全通过
行驶路线为由东向北,右转弯的车辆前方红绿灯是绿灯,安全通过
行驶路线为由西向东的车辆前方红绿灯是绿灯,安全通过
行驶路线为由北向东的车辆前方红绿灯是绿灯,安全通过
行驶路线为由南向东,右转弯的车辆前方红绿灯是绿灯,安全通过
南北方向是绿灯
行驶路线为由南向北的车辆前方红绿灯是绿灯,安全通过
行驶路线为由南向东,右转弯的车辆前方红绿灯是绿灯,安全通过
行驶路线为由北向南的车辆前方红绿灯是绿灯,安全通过
行驶路线为由西向北的车辆前方红绿灯是绿灯,安全通过
行驶路线为由南向北的车辆前方红绿灯是绿灯,安全通过
行驶路线为由北向南的车辆前方红绿灯是绿灯,安全通过
行驶路线为由西向北的车辆前方红绿灯是绿灯,安全通过
行驶路线为由西向北的车辆前方红绿灯是绿灯,安全通过
行驶路线为由北向西,右转弯的车辆前方红绿灯是绿灯,安全通过
行驶路线为由南向北的车辆前方红绿灯是绿灯,安全通过
行驶路线为由西向南,右转弯的车辆前方红绿灯是绿灯,安全通过
行驶路线为由东向北,右转弯的车辆前方红绿灯是绿灯,安全通过
行驶路线为由南向北的车辆前方红绿灯是绿灯,安全通过
行驶路线为由南向北的车辆前方红绿灯是绿灯,安全通过
行驶路线为由北向南的车辆前方红绿灯是绿灯,安全通过
行驶路线为由南向东,右转弯的车辆前方红绿灯是绿灯,安全通过
行驶路线为由北向西,右转弯的车辆前方红绿灯是绿灯,安全通过
行驶路线为由西向北的车辆前方红绿灯是绿灯,安全通过
-------<a href="http://www.itheima.com/"">android培训</a>、<a href="http://www.itheima.com/" ">java培训</a>期待与您交流!----------