⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 emluator.java

📁 高速公路客运仿真
💻 JAVA
字号:
package Emluator;
import java.util.Vector;

/**
 * <p>Title: Emluator</p>
 * <p>Description: 仿真逻辑</p>
 * <p>Copyright: Copyright (c) 2003</p>
 * <p>Company: 西安电子科技大学计算机学院研03软件与理论</p>
 * @author 任声骏
 * @version 1.0
 */

public class Emluator {
  int currentTime=0;//当前时间
  int hour,minute;//hour表示当前小时数,minute表示当前分钟数
  BusStation XNStation;//西安站
  BusStation BJStation;//宝鸡站
  static Vector carMovingToXN;//正从宝鸡驶往西安的车辆队列
  static Vector carMovingToBJ;//正从西安驶往宝鸡的车辆队列
  int maxPassenger;//每分钟产生的人数上限
  public Emluator() {

  }
  public Emluator(int XNV,int XNI,int BJV,int BJI,int PNMAX){
    maxPassenger=PNMAX;
    XNStation=new BusStation(XNV,XNI,"西安");
    BJStation=new BusStation(BJV,BJI,"宝鸡");
    carMovingToXN=new Vector();
    carMovingToBJ=new Vector();

  }

   //仿真逻辑的实现
  public  void simulate(int i){
      currentTime=i;//更新当前时间
      //把用计数器i表示的时间转化为hour:minute的形式
      hour=(int)(currentTime+30)/60+7;
      minute=(currentTime+30)%60;
      System.out.println(hour+":"+minute);
      //7:30--5:59每分钟随机产生乘客
      if(i<630){
        XNStation.producePass(maxPassenger,i);
        BJStation.producePass(maxPassenger,i+1);
      }
      //8:00以后
      if(i>=30){
        //判断是否有车到出车时间
        if(i<=630){//判断依维柯类型的车是否有车到发车时间,有则加入行驶对列中
          if (XNStation.isIvecoOut(currentTime)) {//检查西安站,有则加入到开往宝鸡方向的客车队列中
            carMovingToBJ.addElement(XNStation.ivecoOut());
          }
          if (BJStation.isIvecoOut(currentTime)) {//检查宝鸡站,有则加入到开往西安方向的客车队列中
            carMovingToXN.addElement(BJStation.ivecoOut());
          }
        }
        if(i>=60){
          if(i<=600){//判断沃尔沃类型的车是否有车到发车时间,有则加入行驶对列中
            if (XNStation.isVolvoOut(currentTime)) {//检查西安站,有则加入到开往宝鸡方向的客车队列中
              carMovingToBJ.addElement(XNStation.volvoOut());
            }
            if (BJStation.isVolvoOut(currentTime)) {//检查宝鸡站,有则加入到开往西安方向的客车队列中
              carMovingToXN.addElement(BJStation.volvoOut());
            }
          }
        }
        //控制车辆的行驶
        for(int i1=0;i1<carMovingToBJ.size();i1++){
          moveToBJ((Vehicle)carMovingToBJ.get(i1),currentTime);
        }
        for(int i2=0;i2<carMovingToXN.size();i2++){
          moveToXN((Vehicle)carMovingToXN.get(i2),currentTime);
        }
      }
      System.out.println("XN 站乘客数: "+XNStation.passNum()  );
      System.out.println("BJ 站乘客数: "+BJStation.passNum()  );

  }
  //开往宝鸡方向的车辆的行驶:调用car的方法Vehicle::moveToBJ控制车辆的行驶
  //如果车辆car已到站,car.moveToBJ()返回真,将车辆加入宝鸡站的相应类型的车辆队列中
  //BJStation.appendCar()统一控制车辆进站得处理分别将Iveco和Volvo类型的车加入各自的队列中
   public void moveToBJ(Vehicle car,int curTime){
      if(car.moveToBJ()) {
        int indexofcar=0;//表示车辆car在队列carMovingToBJ中的位置
        for(int j=0;j<carMovingToBJ.size();j++){
          if(carMovingToBJ.get(j).equals(car)) indexofcar=j;
        }
        BJStation.appendCar( (Vehicle) carMovingToBJ.remove(indexofcar), curTime);
      }
   }
  //开往西安方向的车辆的行驶:调用car的方法Vehicle::moveToBJ控制车辆的行驶
  //如果车辆car已到站,car.moveToXN()返回真,将车辆加入宝鸡站的相应类型的车辆队列中
  //XNStation.appendCar()统一控制车辆进站得处理分别将Iveco和Volvo类型的车加入各自的队列中
   public void moveToXN(Vehicle car,int curTime){
     if(car.moveToXN()){
       int indexofcar=0;//表示车辆car在队列carMovingToXN中的位置
        for(int j=0;j<carMovingToXN.size();j++){
          if(carMovingToXN.get(j).equals(car)) indexofcar=j;
        }
       XNStation.appendCar( (Vehicle) carMovingToXN.remove(indexofcar), curTime);
     }
   }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -