黑马程序员技术交流社区

标题: 交通灯系统的灯的问题求大神来解 [打印本页]

作者: l396262632    时间: 2013-8-24 01:58
标题: 交通灯系统的灯的问题求大神来解
本帖最后由 黄兴旺 于 2013-8-24 19:49 编辑

S2N("N2S", "S2W", false),
S2W("N2E", "E2W", false),
E2W("W2E", "E2S", false),
E2S("W2N", "S2N", false),
N2S(null, null, false),
N2E(null, null, false),
W2E(null, null, false),
W2N(null, null, false),
S2E(null, null, true),
E2N(null, null, true),
N2W(null, null, true),
W2S(null, null, true);


这些灯 本人明白 ,关于灯里面的参数,本人想了半天也没想白!
到论坛 跪求 指点!!!!



作者: 小冰块    时间: 2013-8-24 08:42
不明白是因为你没有了解枚举类,枚举类也是一种类,在枚举中刚开始的位置定义的枚举对象就是这个类的对象,就像你写了一个class定义的类,然后在类的开始位置new了本类对象一样。new对象的时候后面跟着的是不是和类名相同的构造函数?有的构造函数是不是需要传参数?上面的三个参数就是创建对象时传给构造函数的参数,而枚举类实现对象的方法就是不需要new+构造函数,只需要写出对象名,然后紧跟着在括号里传入参数就可以。
在LAMP类中,除了上述你列出的代码外,紧跟在下面的还有这些:
  1. //向对方向的对象名
  2.         private String opposite;
  3.         //下一个方向的对象名
  4.         private String next;
  5.         //当前灯的红绿状态,绿灯为true,红灯为false
  6.         private boolean lighted;

  7.         /*枚举类构造函数,必须为私有*/       
  8.         private Lamp(String opposite,String next,boolean lighted){
  9.                 this.opposite = opposite;
  10.                 this.next = next;
  11.                 this.lighted = lighted;
  12.         }
复制代码
现在能看明白了吗?
作者: 杨增坤    时间: 2013-8-24 09:12
S2N("N2S", "S2W", false), S2W("N2E", "E2W", false),E2W("W2E", "E2S", false),E2S("W2N", "S2N", false),
N2S(null, null, false), N2E(null, null, false), W2E(null, null, false), W2N(null, null, false),
S2E(null, null, true), E2N(null, null, true), N2W(null, null, true), W2S(null, null, true);


你要结合那个交通图来理解,首先参数的理解是 方向(“相反方向”,“下一个方向”,"此方向的等是否是路灯")

根据交通等图,理解灯的变灯的顺序后,这样理解,
我们知道,有四个方向的灯是常绿的,他们没有相反他们是: S2E(null, null, true), E2N(null, null, true), N2W(null, null, true), W2S(null, null, true);
                 其他的八个方向的灯两两互为相反的方向,所以我们操作其中四个方向的等就可以,其他的就会跟着变也就可以不用指定其反方向的,因为操作的四个方向的已经指定了,


    顺序:当前方向的灯变绿(亮)或者红(黑)了,那么反方向的灯也要跟着变,同时要指定下一个方向,当前要是亮,则下一个方向的则是黑,反过来一样操作,所以要指定下一个方向,并且要标识当前灯的状况,所以要指定最后一个参数。
希望你能理解,对你有帮助!

lamp.png (42.97 KB, 下载次数: 9)

lamp.png

作者: 清心玉质    时间: 2013-8-24 13:18
12个方向的灯,分析有四个方向常绿,剩余的八个灯都是两两相对,所以只要控制四个灯的逻辑即可,但是不要搞相对方向的四个灯 。
当前灯和对面灯是同一状态,下一个灯是相反状态,这些状态是通过构造方法的参数进行传递的:
也就是lamp(oppsite相反灯,next下一灯,false灯的状态,可以在灯控制系统中设定状态):

案例里面试选取了南和东这四个方向:
S2N("N2S", "S2W", false),
S2W("N2E", "E2W", false),
E2W("W2E", "E2S", false),
E2S("W2N", "S2N", false),
下面这四个是相对的,这里确定上面四个方向也就是主方向才有相反灯,否则就是两个相反方向的灯来回执行light方法,陷入死循环
N2S(null, null, false),
N2E(null, null, false),
W2E(null, null, false),
W2N(null, null, false),
下面四个是常绿的,没有相反灯、没有下一个灯,
S2E(null, null, true),
E2N(null, null, true),
N2W(null, null, true),
W2S(null, null, true);

作者: l396262632    时间: 2013-8-24 22:52
小冰块 发表于 2013-8-24 08:42
不明白是因为你没有了解枚举类,枚举类也是一种类,在枚举中刚开始的位置定义的枚举对象就是这个类的对象, ...

大神传参什么的明白 ! 我的意思是 逻辑!!参数里面代表的逻辑没理明白!

作者: l396262632    时间: 2013-8-24 22:55
forward 发表于 2013-8-24 09:12
S2N("N2S", "S2W", false), S2W("N2E", "E2W", false),E2W("W2E", "E2S", false),E2S("W2N", "S2N", false) ...

兄弟 给力 有点明白了!

作者: l396262632    时间: 2013-8-24 22:58
清心玉质 发表于 2013-8-24 13:18
12个方向的灯,分析有四个方向常绿,剩余的八个灯都是两两相对,所以只要控制四个灯的逻辑即可,但是不要搞 ...

兄台 看完你的彻底悟了!上面 俩哥们 很专业,第一个语言很专业 就是没搞懂我要问的问题,第二个也很专业,关键的地方 没解释清, 看完你的!我彻底悟了





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