黑马程序员技术交流社区

标题: 交通灯系统的小问题 [打印本页]

作者: 陈洋    时间: 2013-9-17 16:56
标题: 交通灯系统的小问题
本帖最后由 陈洋 于 2013-9-17 17:15 编辑
  1. package com.isoftstone.interview.traffic;

  2. /**
  3. * 每个Lamp元素代表一个方向上的灯,总共有12个方向,所有总共有12个Lamp元素。
  4. * 有如下一些方向上的灯,每两个形成一组,一组灯同时变绿或变红,所以,
  5. * 程序代码只需要控制每组灯中的一个灯即可:
  6. * s2n,n2s   
  7. * s2w,n2e
  8. * e2w,w2e
  9. * e2s,w2n
  10. * s2e,n2w
  11. * e2n,w2s
  12. * 上面最后两行的灯是虚拟的,由于从南向东和从西向北、以及它们的对应方向不受红绿灯的控制,
  13. * 所以,可以假想它们总是绿灯。
  14. * @author 张孝祥 www.it315.org
  15. *
  16. */
  17. /**/

  18. public enum Lamp {
  19.         /*每个枚举元素各表示一个方向的控制灯*/        
  20.         S2N("N2S","S2W",false),S2W("N2E","E2W",false),E2W("W2E","E2S",false),E2S("W2N","S2N",false),
  21.         /*下面元素表示与上面的元素的相反方向的灯,它们的“相反方向灯”和“下一个灯”应忽略不计!*/
  22.         N2S(null,null,false),N2E(null,null,false),W2E(null,null,false),W2N(null,null,false),
  23.         /*由南向东和由西向北等右拐弯的灯不受红绿灯的控制,所以,可以假想它们总是绿灯*/
  24.         S2E(null,null,true),E2N(null,null,true),N2W(null,null,true),W2S(null,null,true);
  25.         
  26.         private Lamp(String opposite,String next,boolean lighted){
  27.                 this.opposite = opposite;
  28.                 this.next = next;
  29.                 this.lighted = lighted;
  30.         }


  31.         /*当前灯是否为绿*/        
  32.         private boolean lighted;
  33.         /*与当前灯同时为绿的对应方向*/        
  34.         private String opposite;
  35.         /*当前灯变红时下一个变绿的灯*/        
  36.         private String next;
  37.         public boolean isLighted(){
  38.                 return lighted;
  39.         }
  40.         
  41.         /**
  42.          * 某个灯变绿时,它对应方向的灯也要变绿
  43.          */        
  44.         public void light(){
  45.                 this.lighted = true;
  46.                 if(opposite != null){//这里为什么不是死循环,求解释?我觉得下一次的值也不得与Null啊。。。。
  47.                         Lamp.valueOf(opposite).light();
  48.                 }
  49.                 System.out.println(name() + " lamp is green,下面总共应该有6个方向能看到汽车穿过!");
  50.                
  51.         }
  52.         
  53.         /**
  54.          * 某个灯变红时,对应方向的灯也要变红,并且下一个方向的灯要变绿
  55.          * @return 下一个要变绿的灯
  56.          */        
  57.         public Lamp blackOut(){
  58.                 this.lighted = false;
  59.                 if(opposite != null){
  60.                         Lamp.valueOf(opposite).blackOut();
  61.                 }               
  62.                
  63.                 Lamp nextLamp= null;
  64.                 if(next != null){
  65.                         nextLamp = Lamp.valueOf(next);
  66.                         System.out.println("绿灯从" + name() + "-------->切换为" + next);                        
  67.                         nextLamp.light();
  68.                 }
  69.                 return nextLamp;
  70.         }
  71. }
复制代码
7K面试题中的源码,小问题。问题在上面注释处第50行
作者: 罗凯健    时间: 2013-9-17 17:03
啊?为什么死循环?你看看构造函数,S2N的opposite是N2S,N2S的opposite就是null啊。这里只是简单的判断,并没有涉及循环啊。
作者: 陈洋    时间: 2013-9-17 17:15
罗凯健 发表于 2013-9-17 17:03
啊?为什么死循环?你看看构造函数,S2N的opposite是N2S,N2S的opposite就是null啊。这里只是简单的判断, ...

谢谢了。之前没有注意到。{:soso_e100:}




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