黑马程序员_编写交通灯系统思路与感想

本文作者分享了在编写交通灯管理系统时的心得体会,深入理解了面向对象编程的思想。通过分析交通灯的实际需求,作者创建了Car、Road、Lamp和ContralOfTraffic四个类,模拟了红绿灯的交替变化和车辆通行规则。代码实现包括车辆的行驶方向判断、红绿灯状态控制以及十字路口车辆的增加和减少。交通灯控制类每隔10秒切换东西和南北方向的绿灯,车辆根据红绿灯状态安全通过路口。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值