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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 阿磊 中级黑马   /  2014-7-31 17:11  /  1188 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 阿磊 于 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。。。求大神帮忙分析

3 个回复

倒序浏览
求大牛指点迷津。。顶起
回复 使用道具 举报
一共有 8 个需要控制的灯,手动控制 4 个,这 4 个通过 next 连成一个圈,另外 4 个通过这 4 个的 oppostie 控制。还有 4 个常亮不需要控制。
所以 opposite 不需要手动控制,程序也不会运行到 opposite 这个灯。
最好是找一张纸,一个一个写出来,到第五个就转回来了

评分

参与人数 1黑马币 +1 收起 理由
阿磊 + 1

查看全部评分

回复 使用道具 举报 1 0
icris 发表于 2014-7-31 18:54
一共有 8 个需要控制的灯,手动控制 4 个,这 4 个通过 next 连成一个圈,另外 4 个通过这 4 个的 oppostie ...

哦哦  明白了,原来是把第四个灯的下一个参数定的是第一个灯,所以形成了4个灯的循环。。。我自己写代买的时候把第四个灯的下一个灯写成了第一个等的oppostie这个等上面去了,怪不得会转出去了,像你说的其他的等是不用被控制的。:lol  恍然大悟
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马