黑马程序员技术交流社区
标题:
关于交通灯的一些思考
[打印本页]
作者:
BlackHorse
时间:
2011-7-19 17:58
标题:
关于交通灯的一些思考
老师视频里是这样定义枚举等的,上面4个一组有opposite和next下面一组没有
S2N("N2S","S2W",false),S2W("N2E","E2W",false),E2W("W2E","E2S",false),E2S("W2N","S2N",false),
S2E(null,null,true),E2N(null,null,true),N2W(null,null,true),W2S(null,null,true);
而在ControllerLamp里面currentLamp = Lamp.S2N;currentLamp.light();指定了currentLamp=SN2;
如果我想随机挑选一个非右转弯的灯做启动灯,而不是指定一个灯做启动灯就必须
S2N("N2S","S2W",false),S2W("N2E","E2W",false),E2W("W2E","E2S",false),E2S("W2N","S2N",false),
N2S("S2N","N2E",false),N2E("S2W","W2E",false),W2E("E2W","W2N",false),W2N("E2S","N2S",false),
让这8个灯都有逻辑关系,而这样和下面代码
public void light(){
this.lighted = true;
if(opposite != null){
Lamp.valueOf(opposite).light();
}
又会形成死循环。
我就基于这种想法有点思路,希望大家指正
//定义一个开关锁bSwitch,让启动灯这一组的bSwitch一直为true,而opposite一组的一直为false
public boolean bSwitch
public void light()
{
this.lighted=true;
if(opposite!=null)
{
if(bSwitch)
{
Lamp.valueOf(opposite).bSwitch=false;//启动灯被设定后,自己点亮,然后把opposite的开关锁掉 //不让opposite再打开自己,避免形成无限循环
Lamp.valueOf(opposite).light();
System.out.println(name()+" lamp is green.下面总共应该有6个方向能看到车");
}
}
}
//等变红,同时相对方向上的等也变红,而且让next变绿
public Lamp blackOut()
{
this.lighted=false;
if(opposite!=null)
{
if(bSwitch)//这里opposite的bSwitch已经是false了
{
//Lamp.valueOf(opposite).bSwitch=false;
Lamp.valueOf(opposite).blackOut();
System.out.println("绿灯从"+this+"切换到"+next);
}
//this.bSwitch=true;
}
Lamp nextLamp=null;
if(bSwitch){
//由于opposite也有next,所以让开关锁锁住对方的next,不让他自己打开,而是这启动等这一组的作为opposite打开
if(next!=null)
{
nextLamp=Lamp.valueOf(next);
nextLamp.light();
}
}
return nextLamp;
}
[
本帖最后由 BlackHorse 于 2011-07-19 18:02 编辑
]
作者:
匿名
时间:
2011-7-21 04:25
或许因为你的 话题太长所以顶贴的人少了,你这个帖子我接了,待看完视频后回来详细分析讨论
作者:
王松朝
时间:
2011-7-21 08:24
用锁…
我觉得用if检查一下下个灯是不是亮的应该就可以了吧,我去试试,
作者:
匿名
时间:
2011-7-21 13:15
你改这么多干嘛
直接将light()方法改为:
public void light()
{
this.lighted = true;
while((opposite!=null)
opposite.lighted=true;
}
不就行了 ,剩下的都不用改
作者:
匿名
时间:
2011-7-21 13:49
笔误,改后:
public void light()
{
this.lighted = true;
if ((opposite!=null)
opposite.lighted=true;
}
作者:
匿名
时间:
2011-7-21 13:55
笔误,改后:
public void light()
{
this.lighted = true;
if (opposite!=null)
opposite.lighted=true;
}
作者:
匿名
时间:
2011-7-21 13:56
呵呵 ,见笑
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2