枚举类型与交通信号灯
耿祥义
如果希望某种变量取值范围是有限个字符序列,就可以定义枚举类型。
1.枚举类型
使关键字enum定义枚举类型。
例如:
pubcli enum TrafficLight {
red,yellow,green; //3个枚举常量
}
声明了一个枚举类型后,就可以用该枚举类型声明一个枚举变量,
例如:
TrafficLight light;
枚举变量light只能取值枚举类型中的常量,通过使用枚举名和“.”运算符获得枚举类型中的常量。
例如:
light = TrafficLight.green;
另外,枚举类型中也可以像类一样声明变量以及定义方法。
2.定义方法
在定义枚举类型时,也可以定义方法,方便程序更加灵活的使用枚举类型的变量。
以下定义的枚举类型中定义了next()方法,方便程序模拟十字交叉路口信号灯的交替变化。
--程序效果、视频讲解和源代码--
(1)程序效果如图:
(2)视频讲解
https://share.weiyun.com/5BuBpOg
Trafficlight.java
public enum Trafficlight { //定义枚举类型
green,yellow,red; //这是三个枚举常量
public Trafficlight next(){
Trafficlight light = green;
if(ordinal()==0){ //绿灯后是黄灯
light = yellow;
}
else if(ordinal()==1){//黄灯后是红灯
light = red;
}
else if(ordinal()==2){//红灯后是绿灯
light = green;
}
return light;
}
}
E.java
public class E {
public static void main(String args[]){
//东西方向信号灯:
Trafficlight lightEW = Trafficlight.green;
//南北方向信号灯:
Trafficlight lightSN = Trafficlight.red;
eastWest(lightEW,lightSN);
}
static void eastWest
(Trafficlight lightEW,Trafficlight lightSN){
if(lightEW == Trafficlight.green){
lightSN = Trafficlight.red;
}
else if(lightEW == Trafficlight.yellow){
lightSN = Trafficlight.red;
}
else if(lightEW == Trafficlight.red){
lightSN = Trafficlight.green;
}
try {
Thread.sleep(2000);
}
catch(Exception exp){}
if(lightSN == Trafficlight.green){
southNorth(lightEW,lightSN);
return;
}
lightEW = lightEW.next();
eastWest(lightEW,lightSN);
}
static void southNorth
(Trafficlight lightEW,Trafficlight lightSN){
if(lightSN == Trafficlight.green){
lightEW = Trafficlight.red;
}
else if(lightSN == Trafficlight.yellow){
lightEW = Trafficlight.red;
}
else if(lightSN == Trafficlight.red){
lightEW = Trafficlight.green;
}
try {
Thread.sleep(2000);
}
catch(Exception exp){}
if(lightEW == Trafficlight.green){
eastWest(lightEW,lightSN);
return;
}
lightSN = lightSN.next();
southNorth(lightEW,lightSN);
}
}
领取专属 10元无门槛券
私享最新 技术干货