代码改变世界

交通灯管理系统(1)

2012-03-02 20:29  党飞  阅读(146)  评论(0)    收藏  举报

---------------------- android培训java培训、期待与您交流! ----------------------

道路模拟:

需求:
每条路线上都会出现多辆车,路线上要随机增加新的车,在灯绿期间还要每秒钟减少一辆车。
设计一个Road类来表示路线,每个Road对象代表一条路线,总共有12条路线,即系统中总共要产生12个Road实例对象。
每条路线上随机增加新的车辆,增加到一个集合中保存。
每条路线每隔一秒都会检查控制本路线的灯是否为绿,是则将本路线保存车的集合中的第一辆车移除,即表示车穿过了路口。

对象分析:
1、路属性:路名。-->功能:添加车,车减少
2、路灯属性:灯的状态。-->功能:切换灯的状态
3、交通灯控制器:为了体现体现灯的之间的关系

其实再创建一个对象路的时候,必须保证这条路上必须时刻有增加车辆的可能,和减少车辆的可能
所以必须在创建对象的时候必须保证该对象的属性车辆数上有时刻增加,和减少的可能,也就是创建两条线程

每个Road对象代表一条路线,总共有12条路线,即系统中总共要产生12个Road实例对象。
每条路线上随机增加新的车辆,增加到一个集合中保存。
每条路线每隔一秒都会检查控制本路线的灯是否为绿,是则将本路线保存车的集合中的第一辆车移除,即表示车穿过了路口

下面用匿名内部类实现这两个增加和减少车辆的功能:

 1.Road.java

package com.zlc.traffic;

import java.util.ArrayList;
import java.util.Random;

public class Road {
    public String name;
    public ArrayList car=new ArrayList();
    Road(String name)
    {
        this.name=name;
       
        //匿名内部类来模拟线程来实现车辆的增加
        Thread addCar=new Thread()
        {
            public void run()
            {
                for(int i=0;i<1000;i++)
                {
                    try {
                        Thread.sleep(new Random().nextInt(10)*500);
                        car.add("车辆"+i+"上路了");
                        System.out.println("车辆"+i+"上路了");
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
          
        };
      
        //匿名内部类来模拟线程来实现车辆的减少
        Thread removeCar=new Thread()
        {
            public void run()
            {
                for(int i=0;i<1000;i++)
                {
                    try {
                        Thread.sleep(500);
                        boolean lighted=Lamp.valueOf(Road.this.name).isLighted();
                        if(lighted&&Road.this.car.size()>0)
                        {
                            System.out.println(car.remove(0)+"出去了");
                        }
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                }
            }
        };
        removeCar.start();
        addCar.start();
    }
    public static void main(String[] args)throws Exception
    {
        Road A=new Road("第一条路");
    }

}

---------------------- android培训java培训、期待与您交流! ----------------------