本帖最后由 阿磊 于 2014-8-16 00:57 编辑
public void light(){
this.lighted = true;
if(opposite != null){
Lamp.valueOf(opposite).light();
}
System.out.println(name() + " lamp is green,下面总共应该有6个方向能看到汽车穿过!");
}
/**
* 某个灯变红时,对应方向的灯也要变红,并且下一个方向的灯要变绿
* @return 下一个要变绿的灯
*/
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;
}
}
按照枚举的方法设计了lamp枚举类,里面构造函数是3个一个opposite,一个next一个lighted,这个代码中,如果绿灯,那么opposite!null,opposite会跟着变绿,如果是红灯,那么opposite会跟着变红,next!null,那么next则会变绿。这里特意把对面的opposite里面的构造初始值设置成null来防止死循环,但是这么做的后果会不会导致,程序运行到opposite这个灯的时候,它内部的oppostie定义的是null那他的oppositie也就相当于于没有,那怎么通过这个opposite来控制他对面的opposite呢,并且next也是一样,怎么来控制呢,还是说等轮到他们的时候只有5条线路在通行,其实它的对面那条是运行不了的,因为它们的opposite和next都是null。。。求大神帮忙分析
|
|