黑马程序员技术交流社区

标题: 交通灯管理系统问题 [打印本页]

作者: 吃阁子的猫    时间: 2013-9-2 09:28
标题: 交通灯管理系统问题
本帖最后由 吃阁子的猫 于 2013-9-2 17:00 编辑

控制灯的那个类能不能写成这样
public class LampController {
private String currentLight;
private LampController(currentLight) {
this.currentLight = currentLight;
  super();
  Lamp.valueOf(currentLight).light();   //设置当前的灯是亮的
  Executors.newScheduledThreadPool(1).scheduleAtFixedRate( //创建一个线程池,安排在给定延迟后运行定期地执行命令
    new Runnable() {   
     @Override
     public void run() {
      currentLight=Lamp.valueOf(currentLight).blackLight();   //每隔10秒变黑一次
     }
    },
    10,
    10,
    TimeUnit.SECONDS);  
}
}
不明白为什么要把当前灯指定出来,当前灯不应该是传进来的吗?



作者: 潘才新    时间: 2013-9-2 13:55
帮你一个。。
作者: 吃阁子的猫    时间: 2013-9-2 15:11
潘才新 发表于 2013-9-2 13:55
帮你一个。。

,不懂

作者: binghaiwang    时间: 2013-9-2 15:45
首先,你想一下,交通情况,是不是肯定有一条路在运作,不能4个路口都停着不动吧?因此需要对一条路进行初始化,而张老师将初始化工作直接写到代码中了,也就是说是写死了,而你可能是想可以根据自己的需求来选择开启哪条的灯是吧,那么你可以通过构造函数在创建对象的时候传入所需的交通灯参数来初始化即可。修改如下:
  1. private Lamp currentLight;

  2.         public LampControl(Lamp current) {
  3.                 this.currentLight = current;
  4.                 currentLight.light(); // 设置当前的灯是亮的
  5.                 Executors.newScheduledThreadPool(1).scheduleAtFixedRate( // 创建一个线程池,安排在给定延迟后运行定期地执行命令
  6.                                 new Runnable() {
  7.                                         @Override
  8.                                         public void run() {
  9.                                                 currentLight = currentLight.backOut(); // 每隔10秒变黑一次
  10.                                         }
  11.                                 }, 10, 10, TimeUnit.SECONDS);
  12.         }
复制代码
以上部分参数及其变量名根据你自己的代码改下即可,记得main函数中要做初始化传值,你最大的错误是将当前灯的变量设为String,这样你整个程序都要跟着做修改,很麻烦,为什么不使用交通灯那个枚举的引用来定义呢。



作者: 吃阁子的猫    时间: 2013-9-2 16:20
binghaiwang 发表于 2013-9-2 15:45
首先,你想一下,交通情况,是不是肯定有一条路在运作,不能4个路口都停着不动吧?因此需要对一条路进行初 ...

哦,明白了,我在改改试试,谢啦!





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