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

📄 vehicle.java

📁 高速公路客运仿真
💻 JAVA
字号:
package Emluator;
import java.util.Vector;
/**
 * <p>Title: Vehicle</p>
 * <p>Description: 一般的车辆,存储车辆当前的信息,包含乘客集合
 * 实现了车辆的行驶逻辑和停靠站的处理</p>
 * <p>Copyright: Copyright (c) 2003</p>
 * <p>Company: 西安电子科技大学计算机学院研03软件与理论</p>
 * @author 任声骏
 * @version 1.0
 */

public class Vehicle{
  private String licenseNumber;//车号
  protected double speed;//车速
  protected int maxPassenger;//限载人数
  private String lastedStation;//最近的站
  private double disAwayLasted;//离最近的站的距离
  private double disAwayBegin;//离始发站的距离
  private Vector passSet;//车中的乘客
  private int direction;//行驶方向:1表示从西安到宝鸡,0表示从宝鸡到西安
  private int takeoffTime;//发车时间
  private int stopTime;//即定的停车时间
  private int passedStopTime;//已停车时间
  private boolean  isMoving;
  public Vehicle( String num,int dir,String ls,int time) {
    takeoffTime=time;
    licenseNumber=num;
    direction=dir;
    stopTime=2;
    passedStopTime=0;
    lastedStation=ls;
    disAwayLasted=0;
    disAwayBegin=0;
    passSet=new Vector();
    isMoving=false;
  }
  //返回限载人数
  public int maxPass(){
    return maxPassenger;
  }
  //返回车牌号
  public String getLicenseNumber(){
   return licenseNumber;
  }
  //返回行驶转态
  public boolean isMoving(){
  return isMoving;
  }
  //设置行驶转态
  public void setMovingstate(boolean state){
    isMoving=state;
  }
   //返回行驶方向
   public int getDirection(){
     return direction;
   }
   //设置行驶方向
    public void setDirection(int dir){
     direction=dir;
    }
   //返回发车时间
   public int  getTakeoffTime(){
     return takeoffTime;
   }
   //设置发车时间
    public void setTakeoffTime(int time){
      takeoffTime=time;
    }
    //返回车辆行驶速度
   public double getSpeed(){
     return speed;
   }
   //返回和设置最近的站
   public String getLastedStation(){
     return lastedStation;
   }
   public void setLastedStation(String ls){
     lastedStation=ls;
   }
   //返回离最近的站的距离
   public double getDisAwayLasted(){
    return disAwayLasted;
   }
   //设置离最近的站的距离
   public void setDisAwayLasted(double disl){
    disAwayLasted=disl;
   }
   //返回离始发站的距离
   public double getDisAwayBegin(){
     return disAwayBegin;
   }
   //设置离始发站的距离
   public void setDisAwayBegin(double disb){
    disAwayBegin=disb;
   }
   //判断是否到了发车时间
   public boolean  isTakeoffTime(int time){
    return (takeoffTime==time)?true:false;
  }
  //返回旅客人数
  public int getPassNum(){
    return  passSet.size();
  }
  //到站的处理
  //如果到站(disAwayLasted<speed)--离刚过站的距离小于车辆的速度,
  //且有人要下车则停车两分钟,否则继续前进
  public void isatStation(){
    if (disAwayLasted < speed &&disAwayBegin>0){//如果到站
        boolean toStop=false;//toStop表示是否有人下车,即是否该停车
        if(isMoving){
          for(int j=0;j<passSet.size();j++){
            if(((Passenger)passSet.get(j)).destination==lastedStation)
            {
              toStop=true;//如果车上乘客有人到站,设置toStop为true(应当停车)
              break;
            }
          }
          if(toStop){//如果有人下车toStop=true
            isMoving=false;//停车
            passedStopTime++;
           for(int j=0;j<passSet.size();j++){//下乘客
            if(((Passenger)passSet.get(j)).destination==lastedStation){
              passSet.remove(j);
              j--;
            }
          }
        }else{//如果到站,无人下车,车辆继续行驶
          passedStopTime=0;
          disAwayBegin+=speed;
        }
      }
      if(!isMoving){//如果车辆为停车状态:isMoving=false
         System.out.println(licenseNumber + "在" + lastedStation + "已停车" +
                               passedStopTime  +"分钟");
         if(passedStopTime<stopTime) isMoving=false;//如果停车时间未达到规定停车时间,继续停
            else isMoving=true;//如果已达到规定停车时间,则设置下一次行驶状态为true(moving)
         passedStopTime++;
      }
    } else {//如果未到站,车辆继续行驶
        passedStopTime = 0;
        disAwayBegin += speed ;
      }
  }
  //初始化
  public void Init(){
      stopTime=2;
      passedStopTime=0;
      disAwayLasted=0;
      disAwayBegin=0;
      passSet.clear();
  }
  //上乘客,从passToPickup队列中取出乘客,加入到乘客集合passSet中
  public void  pickup(Vector  passToPickup){
    for(int i=0;i<maxPassenger;i++){
      if(!passToPickup.isEmpty())
        passSet.addElement((Passenger)passToPickup.remove(0));
    }
  }
  //往宝鸡方向行驶的处理
  public boolean moveToBJ(){
    boolean  end=false;
    //判断最近过了哪一站
    if (disAwayBegin >= 0 && disAwayBegin < 22) {//西安站
      lastedStation = "西安";
      disAwayLasted = disAwayBegin;
    }
    if (disAwayBegin >= 22 && disAwayBegin < 46) {//咸阳
      lastedStation = "咸阳";
      disAwayLasted = disAwayBegin - 22;
    }
    if (disAwayBegin >= 46 && disAwayBegin < 67) {//兴平
      lastedStation = "兴平";
      disAwayLasted = disAwayBegin - 46;
    }
    if (disAwayBegin >= 67 && disAwayBegin < 129) {//武功
      lastedStation = "武功";
      disAwayLasted = disAwayBegin - 67;
    }
    if (disAwayBegin >= 129 && disAwayBegin < 150) {//蔡家坡
      lastedStation = "蔡家坡";
      disAwayLasted = disAwayBegin - 129;
    }
    if (disAwayBegin >= 150 && disAwayBegin < 174) {//虢镇
      lastedStation = "虢镇";
      disAwayLasted = disAwayBegin - 150;
    }
    if(disAwayBegin>=174){//宝鸡
      lastedStation="宝鸡";
      disAwayLasted=disAwayBegin-174;
    }
    //如果到了终点站,返回
    if(lastedStation=="宝鸡"){
     System.out.println(licenseNumber+"已到站"+"\n");
     this.Init();
     end=true;
     return end;
    }
    System.out.print(licenseNumber+"距离" + lastedStation + "以西" + (int)disAwayLasted);
    System.out.println("KM,车内乘客数为:"+passSet.size()+",发车时间为:"+takeoffTime);
    //如果到站(disAwayLasted<speed)--离刚过站的距离小于车辆的速度,
    //且有人要下车则停车两分钟,否则继续前进
    isatStation();//到站的处理
     return end;
  }

  //往西安方向行驶的处理
  public boolean moveToXN(){
    boolean  end=false;
    //判断最近过了哪一站
    if(disAwayBegin>=0&&disAwayBegin<24){//宝鸡站
      lastedStation="宝鸡";
      disAwayLasted=disAwayBegin;
    }
    if(disAwayBegin>=24&&disAwayBegin<45){//虢镇
      lastedStation="虢镇";
      disAwayLasted=disAwayBegin-24;
    }
    if(disAwayBegin>=45&&disAwayBegin<107){//蔡家坡
      lastedStation="蔡家坡";
      disAwayLasted=disAwayBegin-45;
    }
    if(disAwayBegin>=107&&disAwayBegin<128){//武功
      lastedStation="武功";
      disAwayLasted=disAwayBegin-107;
    }
    if(disAwayBegin>=128&&disAwayBegin<152){//兴平
      lastedStation="兴平";
      disAwayLasted=disAwayBegin-128;
    }
    if(disAwayBegin>=152&&disAwayBegin<174){//咸阳
      lastedStation="咸阳";
      disAwayLasted=disAwayBegin-150;
    }
    if(disAwayBegin>=174){
      lastedStation="西安";
      disAwayLasted=disAwayBegin-174;
    }
    //如果到了终点站--西安站,返回
    if(lastedStation=="西安"){
     this.Init();
     System.out.println(licenseNumber+"已到站"+"\n");
     end=true;
     return end;
    }
    System.out.print(licenseNumber+"距离" + lastedStation + "以东" + (int)disAwayLasted);
     System.out.println("KM,车内乘客数为:"+passSet.size()+",发车时间为:"+((int)(takeoffTime+30)/60+7)+":"+((takeoffTime+30) %60));
    //如果到站(disAwayLasted<speed)--离刚过站的距离小于车辆的速度,
    //且有人要下车则停车两分钟,否则继续前进
     isatStation();
     return end;
  }
}

⌨️ 快捷键说明

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