パブリック クラス SSTF {
プライベート静的 int maxsize = 100;
private static int Disc[] = new int [maxsize]; //リクエストシーケンス
private static int count;//アクセスされるトラックの数
private static int disc; //現在のトラック番号
private static int perTime;//各シリンダーを移動するのに時間がかかります
private static int Distance=0;//合計シーク長
private static int FindTime;// 時間を検索
private static double AvgDistance;// 平均シーク長
public SSTF(int disc, int count, int perTime ,int Disc[])
{
this.disc=ディスク;
this.count=カウント;
this.perTime=perTime ;
for(int i=0;i<Disc.length;i++)
ディスク[i]=ディスク[i] ;
}
パブリック void input()
{
System.out.print("現在のトラック番号を入力してください:");
スキャナ s1=新しいスキャナ(System.in);
disc=s1.nextInt();
System.out.print("アクセスするトラックの数を入力してください:");
スキャナ s2=新しいスキャナ(System.in);
count=s2.nextInt();
System.out.print("各シリンダーを通過するのに必要な時間を入力してください:");
スキャナ s3=新しいスキャナ(System.in);
perTime=s3.nextInt();
System.out.print("ディスク要求シーケンスを入力してください(スペースで区切って):");
スキャナ s4=新しいスキャナ(System.in);
for(int i=0;i<count;i++)
Disc[i]=s4.nextInt();
}
public void Delete(int arr[],int n)
{
for(int i=n;i<arr.length-1;i++)
arr[i]=arr[i+1];
}
public void running()
{
int j=0、count1=カウント;
int 分;
int discc=ディスク;
int Discc[]=新しい int[カウント];
while(j<カウント)
{
int num=0;
min=(Disc[0]>=discc)?(Disc[0]-discc):(discc-Disc[0]);
for(int i=0;i<count1;i++)
if(((Disc[i]>=discc)&&(Disc[i]-disc<min))||((Disc[i]<discc)&&(discc-Disc[i]<min)))
{
min=(Disc[i]>=discc)?(Disc[i]-discc):(discc-Disc[i]);
数字=i;
}
Discc[j++]=ディスク[番号];
距離+=分;
discc=ディスク[番号];
削除(ディスク,番号);
カウント1--;
}
AvgDistance=(double )距離/数;
FindTime=perTime*Distance;
System.out.print("\nサービス シーケンス: "+disc+" ");
for(int i=0; i<count;i++)
System.out.print(Discc[i]+" ");
System.out.println("\n合計シーク長:"+距離);
System.out.println("平均シーク長: "+AvgDistance);
System.out.println("シーク時間:"+FindTime+"ms");
}
public static void main(String[] args)
{
System.out.println("--------最短検索時間優先アルゴリズム---------");
SSTF SSTF=新しい SSTF( ディスク, カウント, 時間あたり ,ディスク);
SSTF.input();
SSTF.running();
}
}