A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 吃阁子的猫 中级黑马   /  2013-9-2 09:28  /  1161 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 吃阁子的猫 于 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);  
}
}
不明白为什么要把当前灯指定出来,当前灯不应该是传进来的吗?


评分

参与人数 1技术分 +1 收起 理由
黄文伯 + 1 赞一个!

查看全部评分

4 个回复

倒序浏览
帮你一个。。
回复 使用道具 举报

,不懂
回复 使用道具 举报
首先,你想一下,交通情况,是不是肯定有一条路在运作,不能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,这样你整个程序都要跟着做修改,很麻烦,为什么不使用交通灯那个枚举的引用来定义呢。


评分

参与人数 1技术分 +1 收起 理由
黄文伯 + 1 很给力!

查看全部评分

回复 使用道具 举报
binghaiwang 发表于 2013-9-2 15:45
首先,你想一下,交通情况,是不是肯定有一条路在运作,不能4个路口都停着不动吧?因此需要对一条路进行初 ...

哦,明白了,我在改改试试,谢啦!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马