写一个程序,模拟红绿灯路口车辆通行.
要求:
1. 十字路口,只能横向或者纵向直行,不能拐弯,路口各有一个红绿灯
2. 红灯5s, 绿灯4s, 黄灯1s ,要求每隔1秒打印横向的红绿灯情况
3. 车子随机间隔1-3秒之后会横向通过马路, 打印车辆是等待还是通行
4. 行人随机5-6秒之后纵向通过马路,打印行人是否需要等待还是通行
5. 开始的红绿灯状态可以自定义
大神按照自己理解贴个代码哈。。。3q.....
4个线程:
主线程。负责主体逻辑的更新和控制
红绿灯线程,负责红绿灯状态机管理
行人线程,负责按照随机时间范围产生行人,添加到主线程行人队列
车辆线程,负责按照随机时间范围产生车辆,添加到主线程车辆队列
主线程每秒打印一次当前的行人/车辆/红绿灯状态,并且计算等待时间。
昨天忘记帐号,写了代码没贴上。今天贴上..
[code="java"]
import java.util.Random;
import java.util.Timer;
public class TrafficLight {
private static Timer _lightTimer;
// 红灯5s, 绿灯4s, 黄灯1s.
// 横向灯颜色范围(数字0~3绿灯, 4: 黄灯, 5~9:红灯)
private static int _horizontalLight = 0;
private static Boolean _hasCar = false;
private static Boolean _hasPeople = false;
public static void main(String[] args){
_lightTimer = new Timer();
_lightTimer.schedule(new PrintLight(), 1000, 1000);
// 初始状态.
System.out.println("【横向交通灯】绿色");
Random rnd = new Random();
while(true){
// 车子.
if(!_hasCar){
_hasCar = true;
int carSeconds = rnd.nextInt(3) +1;
Timer t = new Timer();
t.schedule(new PrintCar(), carSeconds*1000);
}
// 行人.
if(!_hasPeople){
_hasPeople = true;
int peopleSeconds = rnd.nextInt(2) +5;
Timer t = new Timer();
t.schedule(new PrintPeople(), peopleSeconds*1000);
}
}
}
static class PrintCar extends java.util.TimerTask{
@Override
public void run() {
System.out.println("<车子>" + (_horizontalLight>=4? "不通过" : "通过"));
_hasCar =false;
}
}
static class PrintPeople extends java.util.TimerTask{
@Override
public void run() {
System.out.println("<行人>" + (_horizontalLight>=5? "通过" : "不通过"));
_hasPeople = false;
}
}
static class PrintLight extends java.util.TimerTask{
@Override
public void run() {
_horizontalLight++;
if(_horizontalLight >=10)
_horizontalLight = 0;
// TODO Auto-generated method stub
if(_horizontalLight <=3){
System.out.println("【横向交通灯】绿灯");
}
else if(_horizontalLight == 4){
System.out.println("【横向交通灯】黄灯");
}
else if(_horizontalLight >=5){
System.out.println("【横向交通灯】红灯");
}
}
}
}
[/code]