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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 杨增坤 金牌黑马   /  2013-8-5 23:40  /  1345 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

请问我这的结果为什么会是这样,老师的都是输出的是两行 6个方向的汽车穿过,我这只是一行,切方向顺序也不一样。我检查了代码是对的啊,为什么结果不一样呢!public class Road {
        private List<String> vechicles = new ArrayList<String>();
        private String name=null;

        public Road(String name) {
                this.name = name;
                ExecutorService pool = Executors.newSingleThreadExecutor();
                pool.execute(new Runnable() {
                        public void run() {
                                for (int i = 1; i < 1000; i++) {
                                        try {
                                                Thread.sleep((new Random().nextInt(10) + 1) * 1000);
                                        } catch (InterruptedException e) {
                                                e.printStackTrace();
                                        }
                                        vechicles.add(Road.this.name + "_" + i);
                                }

                        }
                });

               
         ScheduledExecutorService timer=Executors.newScheduledThreadPool(1);
         timer.scheduleAtFixedRate(
                         new Runnable(){
                                 public void run(){
                                         if(vechicles.size()>0){
                                                 boolean lighted=Lamp.valueOf(Road.this.name).isLighted();
                                                 if(lighted){
                                                         System.out.println(vechicles.remove(0)
                                                                        + "  is traversing!");
                                                 }
                                         }
                                 }
                         },
                         1,
                         1,
                         TimeUnit.SECONDS
                         );
        }
}


public enum Lamp {
        //"S2N","S2W","E2W","E2S"
        //"N2S","N2E","W2E","W2N"
        //"S2E","E2N","N2W","W2S"
    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);

    private boolean lighted;
    private String opposite;
    private String next;
    private Lamp(String opposite,String next,boolean lighted){
            this.opposite=opposite;
            this.next=next;
            this.lighted=lighted;
    }
    private Lamp(){
           
    }

    public boolean isLighted(){
            return lighted;
    }
    public void light(){
            this.lighted=true;
            if(opposite!=null){
             Lamp.valueOf(opposite).light();
             System.out.println(name()+"  lamp is green 下面总共可以有六个方向看到汽车穿梭");
            }
    }
    public Lamp blackOut(){
            this.lighted=false;
            if(opposite!=null){
                Lamp.valueOf(opposite).blackOut();
               }
            Lamp nextLamp=null;
           
            if(next!=null){
                    nextLamp=Lamp.valueOf(next);
                    System.out.println("绿灯从"+name()+"-------->切换为"+next);
                    nextLamp.light();
            }
            return nextLamp;
    }
}


public class lampController {
        private Lamp currentLamp;

        public lampController() {
                this.currentLamp = Lamp.S2N;
                this.currentLamp.light();
               
                ScheduledExecutorService timer=Executors.newScheduledThreadPool(1);
                timer.scheduleAtFixedRate(
                                new Runnable(){
                                        public void run(){
                                                System.out.println("--来了--");
                                                currentLamp=currentLamp.blackOut();
                                               
                                        }
                                },
                                10,
                                10,
                                TimeUnit.SECONDS);
        }

}



public class MainClass {
        public static void main(String[] args) {
                String[] directions = new String[] { "S2N", "S2W", "E2W", "E2S", "N2S",
                                "N2E", "W2E", "W2N", "S2E", "E2N", "N2W", "W2S" };

                for(int i=0;i<directions.length;i++){
                        new Road(directions);
                }
                new lampController();
        }

}


请指教!!!



my.png (25.32 KB, 下载次数: 1)

这是我写的代码运行的结果

这是我写的代码运行的结果

teacher.png (49.86 KB, 下载次数: 1)

这是老师的结果

这是老师的结果

4 个回复

倒序浏览
LZ真粗心.. 一眼就看到了  首先你看下你的打印  你是判断当前的对应路线的灯不为空的时候.. 才做打印.. 你至对应路线的打印于何地啊.. 你竟然把2个打印都写到判断里了... 不考虑其他路线的因素.. 这当然就错了
回复 使用道具 举报
切的方向 根据图来看的话.. 应该是没错了
回复 使用道具 举报
张云杰 发表于 2013-8-5 23:48
LZ真粗心.. 一眼就看到了  首先你看下你的打印  你是判断当前的对应路线的灯不为空的时候.. 才做打印.. 你 ...

谢谢,我明白了,我看粗心了!真的谢谢喽!
回复 使用道具 举报
此问题已经解决,谢谢解答!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马