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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 冯晓骏 中级黑马   /  2013-11-16 03:09  /  1502 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 冯晓骏 于 2013-11-16 03:11 编辑
  1.         public Lamp blackOut(){
  2.                
  3.                 lighted = false;
  4.                
  5.                 System.out.println(name() + "灯变红了");
  6.                
  7.                
  8.                 if(oppsite != null){
  9.                         Lamp.valueOf(oppsite).blackOut();
  10.                 }
  11.                
  12.                 //if(next != null)
  13.                         return Lamp.valueOf(next);
  14.                 //return null;
  15.                
  16.                
  17.         }
复制代码
这个绿灯变红灯的代码,这个代码运行过程中是有问题的,如果把注释的两句去掉就不会出错,我想问的是,其实仔细想想,理论上讲next是不可能为空的,只有传到oppsite下一级以后才有可能为空,但是那个值我并没有接收,而且运行过程中也没有报nullpointerexception异常,所以我就不知道本来逻辑很正常的代码,就是不用判断next为不为空,因为为空我不会接收他,他的返回值是没有意义的,不为空我才会接收他,但运行过程会出问题,那么,问题出在哪呢?有人可以解答么

traffic.zip

2.05 KB, 下载次数: 60

整个源代码,大家可以跑跑看

评分

参与人数 1技术分 +1 收起 理由
田磊阳 + 1

查看全部评分

5 个回复

倒序浏览
没有人遇到同样的问题么
回复 使用道具 举报
我爱android 来自手机 初级黑马 2013-11-16 15:02:50
藤椅
好好研究一下
回复 使用道具 举报
去掉注释并没报错,不知道你看到什么错误提示?像主楼那样注释掉两行的话,交通灯只能切换一次。

判断next是必要的,因为第9行oppsite灯也调用了一次blackOut,oppsite调用时这里的next就是null了。
next为null的时候,读到Lamp.valueOf(next)这句,灯切换的线程就直接挂了。

评分

参与人数 1技术分 +1 收起 理由
黄炳期 + 1

查看全部评分

回复 使用道具 举报
FFF 金牌黑马 2013-11-16 18:35:14
报纸
如果问题已经解决,请及时修改主题为“提问结束”。
修改主题的方法链接
http://bbs.itheima.com/thread-89313-1-1.html
如果没有解决,可能你的问题问得不够清楚。可以重新发问的哦~
回复 使用道具 举报
yangjie 发表于 2013-11-16 15:46
去掉注释并没报错,不知道你看到什么错误提示?像主楼那样注释掉两行的话,交通灯只能切换一次。

判断next ...

问题是,oppsite调用blackOut,即使调用了Lamp.valueOf(null)也无所谓啊,因为不会报错,而且它返回的值也没有被用到,关键就是结果有问题,虽然没有报错
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马