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

📄 fastway.java

📁 高速公路的模拟系统
💻 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 + -