黑马程序员技术交流社区

标题: 【已解决】张老师的交通灯管理系统视频 [打印本页]

作者: 黑马_许芸    时间: 2012-9-2 23:33
标题: 【已解决】张老师的交通灯管理系统视频
本帖最后由 黑马_许芸 于 2012-9-3 21:26 编辑

有看过这个视频的同学吗?看过的同学应该知道张老师在第一次运行该程序的时候发现“"绿灯从 "+name()+" ---------->切换为:"+next”这句话输出不了。然后老师在Lamp中改了几行代码后就运行正常了。可是我跟着老师改了之后还是无法运行成功。我的Lamp类的代码如下,其他代码跟老师都一样的就不贴了。代码中的红色字体部分应该就是症结所在,求高手指点,我实在看不出来错在哪儿了。
  1. package com.isoftstone.interview.traffic;

  2. public enum Lamp
  3. {
  4.         S2N("N2S","S2W",false),S2W("N2E","E2W",false),E2W("W2E","E2S",false),E2S("W2N","S2N",false), //有业务逻辑的4个灯
  5.         N2S(null,null,false)  ,N2E(null,null,false)  ,W2E(null,null,false)  ,W2N(null,null,false)  , //一一和上面的4个灯对应
  6.         S2E(null,null,true)   ,E2N(null,null,true)   ,N2W(null,null,true)   ,W2S(null,null,true)   ; //常绿的4个灯
  7.         
  8.         private boolean lighted;
  9.         private String opposite;//这里要把想对应的Lamp用字符串代替,是因为S2N(N2S),Cannot reference a field before it is defined.
  10.         private String next;
  11.         
  12.         private Lamp(String opposite,String next,boolean lighted)
  13.         {
  14.                 this.opposite = opposite;
  15.                 this.next = next;
  16.                 this.lighted = lighted;
  17.         }
  18.         
  19.         private Lamp()
  20.         {
  21.                 // TODO Auto-generated constructor stub
  22.         }
  23.         
  24.         public boolean isLighted()
  25.         {
  26.                 return lighted;
  27.         }
  28.         
  29.         public void light()
  30.         {
  31.                 System.out.println("light: "+name());
  32.                 this.lighted = true;
  33.                 System.out.println(name()+" lamp is green ,下面总共应该有6个方向能看到汽车穿过 !");
  34.                 if (opposite != null) //这个条件判断很重要,否则就是死循环了
  35.                 {
  36.                         Lamp.valueOf(opposite).light();
  37.                 }

  38.         }
  39.         
  40.         public Lamp blackOut()
  41.         {
  42.                 this.lighted = false;
  43.                 if (opposite != null) //这个条件判断很重要,否则就是死循环了
  44.                 {
  45.                         Lamp.valueOf(opposite).blackOut();
  46.                 }

  47.                 <font color="red">System.out.println(name());      //  这里我打印出来的结果是N2S,可是我明明在LampController中写的currentLamp = Lamp.S2N;
  48.          System.out.println(next);        //因为现在当前的灯变为N2S,所以next就变成null了。</font>
  49.          Lamp nextLamp = null;
  50.                 if (next != null)
  51.                 {
  52.                         nextLamp = Lamp.valueOf(next);
  53.                         System.out.println("绿灯从 "+name()+" ---------->切换为:"+next);
  54.                         nextLamp.light();
  55.                 }
  56.                
  57.                 return Lamp.valueOf(opposite);
  58.         }
  59. }
复制代码

作者: 王陶成    时间: 2012-9-3 00:12
return Lamp.valueOf(opposite);
你最后的返回值应返回的是下一个变绿的灯,你返回了对应路线的灯。
作者: 黑马_许芸    时间: 2012-9-3 08:40
非常感谢。问题已解决!




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