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