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