黑马程序员技术交流社区

标题: 交通灯管理系统过程中的一个问题 [打印本页]

作者: 冯晓骏    时间: 2013-11-16 03:09
标题: 交通灯管理系统过程中的一个问题
本帖最后由 冯晓骏 于 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, 下载次数: 127

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


作者: 冯晓骏    时间: 2013-11-16 14:33
没有人遇到同样的问题么
作者: 我爱android    时间: 2013-11-16 15:02
好好研究一下
作者: yangjie    时间: 2013-11-16 15:46
去掉注释并没报错,不知道你看到什么错误提示?像主楼那样注释掉两行的话,交通灯只能切换一次。

判断next是必要的,因为第9行oppsite灯也调用了一次blackOut,oppsite调用时这里的next就是null了。
next为null的时候,读到Lamp.valueOf(next)这句,灯切换的线程就直接挂了。
作者: FFF    时间: 2013-11-16 18:35
如果问题已经解决,请及时修改主题为“提问结束”。
修改主题的方法链接
http://bbs.itheima.com/thread-89313-1-1.html
如果没有解决,可能你的问题问得不够清楚。可以重新发问的哦~
作者: 冯晓骏    时间: 2013-11-19 01:18
yangjie 发表于 2013-11-16 15:46
去掉注释并没报错,不知道你看到什么错误提示?像主楼那样注释掉两行的话,交通灯只能切换一次。

判断next ...

问题是,oppsite调用blackOut,即使调用了Lamp.valueOf(null)也无所谓啊,因为不会报错,而且它返回的值也没有被用到,关键就是结果有问题,虽然没有报错




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2