黑马程序员_交通灯管理系统

                                          ----------- android培训java培训、java学习型技术博客、期待与您交流! ------------


模拟实现十字路口的交通灯管理系统逻辑,具体需求如下:

 

?          异步随机生成按照各个路线行驶的车辆。

例如:

       由南向而来去往北向的车辆 ---- 直行车辆

       由西向而来去往南向的车辆 ---- 右转车辆

       由东向而来去往南向的车辆 ---- 左转车辆

       。。。

 

?          信号灯忽略黄灯,只考虑红灯和绿灯。

 

?          应考虑左转车辆控制信号灯,右转车辆不受信号灯控制。

 

?          具体信号灯控制逻辑与现实生活中普通交通灯控制逻辑相同,不考虑特殊情况下的控制逻辑。

注:南北向车辆与东西向车辆交替放行,同方向等待车辆应先放行直行车辆而后放行左转车辆。

 

?          每辆车通过路口时间为1秒(提示:可通过线程Sleep的方式模拟)。

 

?          随机生成车辆时间间隔以及红绿灯交换时间间隔自定,可以设置。

 

?          不要求实现GUI,只考虑系统逻辑实现,可通过Log方式展现程序运行结果。

 面向对象的分析与设计: 要使用到的对象有红绿灯,控制系统,汽车,路线.一个重要的经验:谁有数据,谁就提供对外操作这些数据的方法.

       Road类的编写.用十二个road对象代表十二条不同方向的路线.路线中要有车来测试系统.    在构造方法中就启动一个线程,往一个线路中增加车辆.

       Executor: 执行已提交的 Runnable 任务的对象。

       newScheduledThreadPool():创建一个线程池,它可安排在给定延迟后运行命令或者定期地执行.

       scheduleAtFixedRat():创建并执行一个在给定初始延迟后首次启用的定期操作,后续操作具有给定的周期;也就是将在 initialDelay 后开始执行,然后在 initialDelay+period 后执行,接着在 initialDelay + 2 * period 后执行,依此类推。

        java.util.concurrent.TimeUnit是一个枚举,用来表示时间的单位.
 

//路线类

package org.lele;

 

import java.util.ArrayList;

import java.util.Random;

import java.util.concurrent.Executor;

import java.util.concurrent.ExecutorService;

import java.util.concurrent.Executors;

import java.util.concurrent.ScheduledExecutorService;

import java.util.concurrent.TimeUnit;

 

public class Road

{

    public ArrayList<String> cars = new ArrayList<String>();//用一个集合来存储各个路线上所有的车辆.

    private String name;//十二条路线各自的名字.

   

    Road(String name)

    {

        this.name = name;

       

        ExecutorService pool = Executors.newSingleThreadExecutor();//用一个线程库来创建一个线程,将随机时间内来的车辆添加到路线集合中.

        pool.execute(new Runnable()//一个实现了Runnable接口的内部类.

        {

            public void run()

            {

                for(int x = 1; x < 1000; ++x)

                {

                    try

                    {

                        Thread.sleep((new Random().nextInt(10) + 1) * 1000);//随机生成1-10秒的贱格.

                    } catch (InterruptedException e)

                    {

                        e.printStackTrace();

                    }

                        cars.add(Road.this.name);

                }

            }

        });

       

        ScheduledExecutorService timer = Executors.newScheduledThreadPool(1);//创建一个线程池,用来做一个定时器,让路线定时检查灯的状态.

        timer.scheduleAtFixedRate(new Runnable()//这个方法就是定时器的具体实现,用一个线程,每隔一秒检查一次.如果灯是绿的,就把路上的车开走.

        {

            public void run()

            {

                if(cars.size() > 0)

                {

                    boolean light = true;

                    if(light)

                    {

                        System.out.println(cars.remove(0) + "已经开走了.");

                    }

                }

            }

        }, 1, 1, TimeUnit.SECONDS);

    }

  }

  

----------------------- android培训java培训、java学习型技术博客、期待与您交流! ----------------------

详情请查看:http://edu.csdn.net/heima


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值