📄 fastway.java
字号:
import java.util.Vector;
import java.lang.Math;
import java.io.*;
public class Fastway{
public static final int stationnum=6;
public static final int wedistance[]={24,45,107,128,152,174};//各个中途站到起始站的距离
public static final int ewdistance[]={22,46,67,129,150,174};//各个中途站到起始站的距离
public static final String wename[]={"宝鸡","虢镇","菜家坡","武功","兴平","咸阳","西安"};
public static final String ewname[]={"西安","咸阳","兴平","武功","菜家坡","虢镇","宝鸡"};
//属性
private Vector webuslist;//由西开往东的车队
private Vector ewbuslist;//由东开往西的车队
//方法
public Fastway(){
webuslist=new Vector();
ewbuslist=new Vector();
}
//从西到东的方向
public void getwebusfrom(Endstation station){ //从某站得到一辆车
Bus abus;
if(station.getwowbusnum()!=0){
abus=(Bus)station.getwowbusat(0);
if(abus.getflag()==Bus.run){
station.removeawowbus();
webuslist.addElement((Object)abus);
}
}
if(station.getyvkbusnum()!=0){
abus=(Bus)station.getyvkbusat(0);
if(abus.getflag()==Bus.run){
station.removeayvkbus();
webuslist.addElement((Object)abus);
}
}
}
public Bus getwebusat(int index){//取得一辆车
return (Bus)webuslist.elementAt(index);
}
public void removewebusto(Endstation station,int index){//将第index位置的车放入某站
Bus abus=(Bus)webuslist.elementAt(index);
webuslist.removeElementAt(index);
if(abus instanceof Wowbus){
station.insertwowbuslist((Wowbus)abus);
}
else station.insertyvkbuslist((Yvkbus)abus);
}
private int weflag(double distance){//取得距离所在的区间
for(int i=0;i<stationnum;++i){
if(distance<wedistance[i]) return i;
}
return stationnum;
}
private boolean weonstation(Bus abus){//判断下一个时刻是否到站
double curdistance=abus.getbusrate()*abus.getruntime();
double nexdistance=curdistance+abus.getbusrate();
int flag1=weflag(curdistance),flag2=weflag(nexdistance);
if(flag1!=flag2) return true;
return false;
}
//从东到西的方向
public void getewbusfrom(Endstation station){ //从某站得到一辆车
Bus abus;
if(station.getwowbusnum()!=0){
abus=(Bus)station.getwowbusat(0);
if(abus.getflag()==Bus.run){
station.removeawowbus();
ewbuslist.addElement((Object)abus);
}
}
if(station.getyvkbusnum()!=0){
abus=(Bus)station.getyvkbusat(0);
if(abus.getflag()==Bus.run){
station.removeayvkbus();
ewbuslist.addElement((Object)abus);
}
}
}
public Bus getewbusat(int index){//取得一辆车
return (Bus)ewbuslist.elementAt(index);
}
public void removeewbusto(Endstation station,int index){//将第index位置的车放入某站
Bus abus=(Bus)ewbuslist.elementAt(index);
ewbuslist.removeElementAt(index);
if(abus instanceof Wowbus){
station.insertwowbuslist((Wowbus)abus);
}
else station.insertyvkbuslist((Yvkbus)abus);
}
private int ewflag(double distance){//取得距离所在的区间
for(int i=0;i<stationnum;++i){
if(distance<ewdistance[i]) return i;
}
return stationnum;
}
private boolean ewonstation(Bus abus){//判断下一个时刻是否到站
double curdistance=abus.getbusrate()*abus.getruntime();
double nexdistance=curdistance+abus.getbusrate();
int flag1=ewflag(curdistance),flag2=ewflag(nexdistance);
if(flag1!=flag2) return true;
return false;
}
public void fastwayrefresh(Endstation wstation,Endstation estation){
System.out.println("高速公路上行车的情况:");
if((webuslist.size()==0)&&(ewbuslist.size()==0))
System.out.println("高速公路上没有车辆!");
for(int i=0;i<webuslist.size();++i){
Bus abus=getwebusat(i);
System.out.print(abus.getbusmark()+" "+abus.getbusnum()+" ");
if(abus.getflag()==Bus.run){
abus.incruntime();
double distance=abus.getbusrate()*abus.getruntime(),leftdistance;
int index=weflag(distance);
if(index==0){
leftdistance=distance;
}
else{
leftdistance=distance-wedistance[index-1];
}
System.out.println(wename[index]+"以东"+leftdistance+"公里"+" 乘客人数:"+abus.getpassengernum());
if(weonstation(abus)&&(abus.stopat(new Station(wename[index+1]))||index+1==stationnum)){
abus.setflag(Bus.stop);
abus.setlefttime(2);
}
}
else{
double distance=abus.getbusrate()*abus.getruntime();
int index=weflag(distance)+1;
System.out.println("正在"+wename[index]+"站停车下人");
abus.getoffat(new Station(wename[index]));
if(index==stationnum){
removewebusto(estation,i);
abus.setlefttime();
abus.setruntime(0);
}
else{
abus.declefttime();
if(abus.getlefttime()==0){
abus.setflag(Bus.run);
}
}
}
}
for(int i=0;i<ewbuslist.size();++i){
Bus abus=getewbusat(i);
System.out.print(abus.getbusmark()+" "+abus.getbusnum()+" ");
if(abus.getflag()==Bus.run){
abus.incruntime();
double distance=abus.getbusrate()*abus.getruntime(),leftdistance;
int index=ewflag(distance);
if(index==0){
leftdistance=distance;
}
else{
leftdistance=distance-ewdistance[index-1];
}
System.out.println(ewname[index]+"以西"+leftdistance+"公里"+" 乘客人数:"+abus.getpassengernum());
if(ewonstation(abus)&&(abus.stopat(new Station(ewname[index+1]))||index+1==stationnum)){
abus.setflag(Bus.stop);
abus.setlefttime(2);
}
}
else{
double distance=abus.getbusrate()*abus.getruntime();
int index=ewflag(distance)+1;
System.out.println("正在"+ewname[index]+"站停车下人");
abus.getoffat(new Station(ewname[index]));
if(index==stationnum){
removeewbusto(wstation,i);
abus.setlefttime();
abus.setruntime(0);
}
else{
abus.declefttime();
if(abus.getlefttime()==0){
abus.setflag(Bus.run);
}
}
}
}
getwebusfrom(wstation);
getewbusfrom(estation);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -