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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

学过张孝祥老师的交通灯管理系统的同学都知道 ,在第10集第一次运行的时候,交通灯没有转向,后来修改的是Lamp类里面的blackOut方法代码才正常工作,开始时,我也很纳闷,为什么第一次那样写不行。现在把我理解的结果跟大家一起探讨。
原始代码:
  1. Lamp nextLamp =Lamp.valueOf(next);
  2.                 if(this.next!=null)
  3.                 {
  4.                 //        nextLamp =Lamp.valueOf(next);
  5.                         nextLamp.light();
  6.                         System.out.println("绿灯从"+this.name()+"----->"+this.next);
  7.                 }
  8.                
  9.                 return nextLamp;
复制代码
运行结果:N2W_9正在通过
S2E_10正在通过
N2W_10正在通过
E2N_10正在通过
W2S_10正在通过
N2W_11正在通过
纠正后的代码:
  1.         Lamp nextLamp =null;
  2.                 if(this.next!=null)
  3.                 {
  4.                         nextLamp =Lamp.valueOf(next);
  5.                         nextLamp.light();
  6.                         System.out.println("绿灯从"+this.name()+"----->"+this.next);
  7.                 }
  8.                
  9.                 return nextLamp;
复制代码
运行结果:
N2W_9正在通过
S2W灯变绿,下面有六个方向的汽车通过
N2E灯变绿,下面有六个方向的汽车通过
绿灯从S2N----->S2W
S2W_0正在通过
根据输出结果及代码发现:第一段代码没有考虑next=null的情况,从而,在10秒以后,仅有的两个方向(程序起始)的灯都黑了而blackOut方法里执行让next亮的方法未执行,所以16个方向的灯只有4个向右转向的等都亮着,其他的逗灭了。
这只是我的分析,希望大家发表一下自己的观点。最后:缅怀张老师


0 个回复

您需要登录后才可以回帖 登录 | 加入黑马