写了一些垃圾代码,还没有优化,用的耗时耗力且平面的方式,初学者望指正
package czxt;
/**
*
* 操作系统实验四。磁盘寻道的电梯调度和SSTF
*
* @author 柴鸿浚201830221041
*
*/
public class CZXT4 {
public static void main(String[] args) {
int[] team = {
86,147,91,177,94,150,102,175,130
};
Left left=new Left(143, 125);
System.out.println("电梯调度:");
left.findPlaceL(team);
SSTF sstf=new SSTF(143, 125);
System.out.println("SSTF调度:");
sstf.findPlaceS(team);
}
}
class Left{
int startPlace;//移动臂一开始所在的方向;
int lastPlace;//上一次的位置
int thisPlace;//当前所在的位置
//boolean direction;//记录当前方向
public Left(int startPlace,int lastPlace){//
this.startPlace=startPlace;
this.lastPlace =lastPlace;
}
public void findPlaceL(int[] team){
int sum=0;
if(this.startPlace>=this.lastPlace) {//一开始朝大的方向走得情况
//System.out.println("1");
this.thisPlace=this.startPlace;
int[] over=new int[9];int j1=0;
for(int i=0;i<team.length;i++) {//取出over数组;
if(team[i]>=this.startPlace) {
over[j1]=team[i];
j1++;
}
}
for(int m=0;m<j1;m++) {//将over数组排序;
int min=201;
int k=0;
for(int n=m;n<j1;n++ ) {
if(min>=over[n]) {
min=over[n];
k=n;
}
}
int a=over[m];
over[m]=min;
over[k]=a;
}
for(int m=0;m<j1;m++) {//输出正方向的了
System.out.print(over[m]+" ");
sum=sum+(over[m]-this.thisPlace);
this.lastPlace=this.thisPlace;
this.thisPlace=over[m];
}
//
int[] lower=new int [9];int j2=0;
for(int i=0;i<team.length;i++) {//取出lower数组;
if(team[i]<this.startPlace) {
//System.out.println(team[i]);
lower[j2]=team[i];
//System.out.println(lower[j2]);
j2++;
}
}
for(int m=0;m<j2;m++) {//将lower数组排序;
int max=0;
int k=0;
for(int n=m;n<j2;n++ ) {
if(max<=lower[n]) {
max =lower[n];
k=n;
}
}
int a=lower[m];
lower[m]=max;
lower[k]=a;
}
for(int m=0;m<j2;m++) {//输出反方向的了
System.out.print(lower[m]+" ");
sum=sum+(this.thisPlace-lower[m]);
this.lastPlace=this.thisPlace;
this.thisPlace=lower[m];
}
System.out.println();
System.out.println("移动步数是:"+sum);
System.out.println();
System.out.println("---------------------------------------------------------");
}
/
if(this.startPlace<this.lastPlace) {//一开始朝小的方向走的情况
//System.out.println("2");
this.thisPlace=this.startPlace;
int[] lower=new int [9];int j2=0;
for(int i=0;i<team.length;i++) {//取出lower数组;
if(team[i]<this.startPlace) {
//System.out.println(team[i]);
lower[j2]=team[i];
//System.out.println(lower[j2]);
j2++;
}
}
for(int m=0;m<j2;m++) {//将lower数组排序;
int max=0;
int k=0;
for(int n=m;n<j2;n++ ) {
if(max<=lower[n]) {
max =lower[n];
k=n;
}
}
int a=lower[m];
lower[m]=max;
lower[k]=a;
}
for(int m=0;m<j2;m++) {//输出反方向的了
System.out.print(lower[m]+" ");
sum=sum+(this.thisPlace-lower[m]);
this.lastPlace=this.thisPlace;
this.thisPlace=lower[m];
}
int[] over=new int[9];int j1=0;
for(int i=0;i<team.length;i++) {//取出over数组;
if(team[i]>=this.startPlace) {
over[j1]=team[i];
j1++;
}
}
for(int m=0;m<j1;m++) {//将over数组排序;
int min=201;
int k=0;
for(int n=m;n<j1;n++ ) {
if(min>=over[n]) {
min=over[n];
k=n;
}
}
int a=over[m];
over[m]=min;
over[k]=a;
}
for(int m=0;m<j1;m++) {//输出正方向的了
System.out.print(over[m]+" ");
sum=sum+(over[m]-this.thisPlace);
this.lastPlace=this.thisPlace;
this.thisPlace=over[m];
}
//
System.out.println();
System.out.println("移动步数是:"+sum);
System.out.println();
System.out.println("---------------------------------------------------------");
}
}
}
class SSTF{
int firstPlace;
int thisPlace;
int lastPlace;
public SSTF(int firstPlace,int thisPlace) {
this.firstPlace=firstPlace;
this.thisPlace=thisPlace;
}
public void findPlaceS(int[] team) {
int sum=0;//
this.thisPlace=this.firstPlace;
//int before=this.lastPlace;
//int nowing=this.thisPlace;
for(int i=0;i<team.length;i++) {
int min=200;
int minTack=0;
int k=0;
for(int j=i;j<team.length;j++) {
//System.out.println(Math.abs(this.thisPlace-team[j]));
if(min>=Math.abs(this.thisPlace-team[j])){
min=Math.abs(this.thisPlace-team[j]);
minTack=team[j];
//System.out.println(1);
k=j;
}
}
//System.out.println(team[i]);
int a=team[i];
team[i]=minTack;
team[k]=a;
//this.lastPlace=this.thisPlace;
sum=sum+Math.abs(this.thisPlace-minTack);
this.thisPlace=minTack;
System.out.print(minTack+" ");
}
System.out.println();
System.out.println("移动步数是:"+sum);
}
}