📄 vehicle.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 + -