A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© BlackHorse 黑马帝   /  2011-7-19 17:58  /  2225 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

老师视频里是这样定义枚举等的,上面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 编辑 ]

6 个回复

倒序浏览
黑马网友  发表于 2011-7-21 04:25:52
沙发
或许因为你的 话题太长所以顶贴的人少了,你这个帖子我接了,待看完视频后回来详细分析讨论
回复 使用道具 举报
用锁…
我觉得用if检查一下下个灯是不是亮的应该就可以了吧,我去试试,
回复 使用道具 举报
黑马网友  发表于 2011-7-21 13:15:09
板凳
你改这么多干嘛
直接将light()方法改为:
public void light()
{
                this.lighted = true;
               while((opposite!=null)
                 opposite.lighted=true;
}
不就行了 ,剩下的都不用改
回复 使用道具 举报
黑马网友  发表于 2011-7-21 13:49:35
报纸
笔误,改后:
public void light()
{
                this.lighted = true;
               if ((opposite!=null)
                 opposite.lighted=true;
}
回复 使用道具 举报
黑马网友  发表于 2011-7-21 13:55:41
地板
笔误,改后:
public void light()
{
                this.lighted = true;
               if (opposite!=null)
                 opposite.lighted=true;
}
回复 使用道具 举报
黑马网友  发表于 2011-7-21 13:56:25
7#
呵呵 ,见笑
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马