publicclassexp{publicstaticvoidmain(String[]args){intn=6;//用来统计需求量doublesum=0;//为FCFS算法准备的用来计算总的寻到长度doubletemp=0;intposition=100;//用来存放磁头的出事位置SSTFsstf=newSSTF();SCANscan=newSCAN();inta[]={100,24,37,58,81,95,150};//寻道序列a[0]=position;sum=0;System.out.println(磁头初始位置为100!磁头向磁道号增加方向寻道!);System.out.println(初始化磁道序列:);for(inti=1;i=6;i++)System.out.print(a[i]+);System.out.println();System.out.println(FCFS算法序列:);for(inti=1;i=n;i++){System.out.print(a[i]+);temp=a[i]-a[i-1];if(temp=0);elseif(temp0){temp=-temp;}sum=sum+temp;}System.out.println();System.out.println(寻道长度为+sum);System.out.println(平均寻道长度为+sum/n);intb[]={100,24,37,58,81,95,150};sstf.Calculate(b,n,100);intc[]={100,24,37,58,81,95,150};scan.Check(c,n,100);}}classSCAN{//电梯算法publicintm=1;//用来存放磁头的初始位置publicbooleanRun=true;publicintsum=0;publicvoidCheck(inta[],intn,intposition){inttemp;for(inti=n;i0;i--)//冒泡排序{for(intj=0;ji;j++){if(a[j]a[j+1])//按顺序依次比较大小{temp=a[j];//把大的数字往前面放a[j]=a[j+1];a[j+1]=temp;}}}while(Run){//此循环用来寻找磁头的初始位置被排到了什么位置for(inti=0;i=n;i++){if(a[i]==position){m=i;Run=false;}}}System.out.println(SCAN算法序列:);for(inti=m+1;i=n;i++){//磁头向大号移动sum=sum+a[i]-a[i-1];System.out.print(a[i]+);}sum=sum+200-a[n];sum=sum+200-a[m-1];for(inti=m-1;i=0;i--){if(i!=0){sum=sum+a[i]-a[i-1];}System.out.print(a[i]+);}System.out.println();System.out.println(寻道长度为+sum);System.out.println(平均寻道长度为+sum/n);}}classSSTF{//最短寻道时间优先算法publicintm=1;//用来判断排序后磁头所在的初始位置的下标publicintb[];booleanflag=true;publicdoubleSUM=0;publicintmleft,mright;publicSSTF(){b=newint[20];}publicvoidCalculate(inta[],intn,intposition){//两个形参分别表示磁盘请求序列inttemp,p,q;System.out.println(SSTF序列为:);while(flag){for(inti=n;i0;i--)//冒泡排序{for(intj=m;ji;j++){p=a[j]-a[0];q=a[j+1]-a[0];if(a[j]-a[0]0)p=-p;if(a[j+1]-a[0]0)q=-q;if(pq)//按顺序依次比较大小{temp=a[j];a[j]=a[j+1];a[j+1]=temp;}}}System.out.print(a[m]+);a[0]=a[m];m=m+1;if(m==7)break;p=a[0]-a[m];if(a[0]-a[m]0)p=-p;SUM=SUM+p;}System.out.println();System.out.println(寻道长度为+SUM);System.out.println(平均寻道长度为+SUM/n);}}