日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

磁盘调度算法java代码

發(fā)布時間:2025/3/21 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 磁盘调度算法java代码 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

第一步,創(chuàng)建一個CSCAN類

public class CSCAN {public int m=0; //用來存放磁頭的初始位置public boolean Run=true;public int sum=0;public void Check(int a[],int n,int position){int temp;for (int i = n; i > 0; i--){ // 冒泡排序for (int j = 0; j < i; j++){if (a[j] > a[j + 1]) { // 按順序依次比較大小temp = a[j]; // 把大的數(shù)字往前面放a[j] = a[j + 1];a[j + 1] = temp;}}}while (Run){for (int i = 0; i <= n; i++){if (a[i] == position){ m=i;Run=false;}}}System.out.println("CSCAN算法序列:");for(int i=m+1;i<=n;i++){ //磁頭向大號移動sum=sum+a[i]-a[i-1];System.out.print(a[i]+" ");}sum=sum+200-a[n];sum=sum+199;sum=sum+a[0]-1;for(int i=0;i<=m-1;i++){if(i!=m-1){sum=sum+a[i+1]-a[i];}System.out.print(a[i]+" ");}System.out.println();System.out.println("尋道長度為"+sum);System.out.println("平均尋道長度為"+sum/n); } }

第二步,創(chuàng)建一個DiskManage類

import java.util.Scanner;public class DiskManage {public static void main (String [] args){int a[]=new int[20];int n=0;int m=0;double sum=0;double temp=0;int position=0;SSTF sstf=new SSTF();SCAN scan = new SCAN();CSCAN cscan = new CSCAN();System.out.println("請輸入磁盤請求的個數(shù):");try{Scanner reader=new Scanner(System.in); n=reader.nextInt(); }catch(Exception e){ }System.out.println("請輸入磁盤請求序列:");Scanner reader = new Scanner(System.in);for (int i = 1; i <= n; i++) { try{a[i]=reader.nextInt(); }catch(Exception e){ } }System.out.print("請輸入磁頭的初始位置:");// try{Scanner re = new Scanner(System.in);a[0]=re.nextInt(); position=a[0]; // }// catch(for (int i = 1; i <= n; i++){Exception e){ }// System.out.print(a[i] + " "); }System.out.println("*****************************************************************");System.out.println("提示:磁頭的序列范圍1~200!磁頭從小號到大號尋道!");System.out.println("請輸入相應的選擇操作::");System.out.println("1、先來先服務算法(FCFS)");System.out.println("2、最短尋道時間優(yōu)先算法(SSTF)");System.out.println("3、掃描算法(SCAN)");System.out.println("4、循環(huán)掃描算法(CSCAN)");Scanner read = new Scanner(System.in);try{ m=read.nextInt(); }catch(Exception e){ }System.out.println("m的值為" + m);read.close();switch (m) {case 1: sum=0;System.out.println("FCFS算法序列:");for (int i = 1; i <= n; i++){System.out.print(a[i] + " ");temp = a[i] - a[i - 1];if (temp >= 0);else if (temp < 0) { temp=-temp; }sum=sum+temp; } System.out.println();System.out.println("sum的值為" + sum);System.out.println("平均尋到長度為" + sum / n);break;case 2: sstf.Calculate(a, n, position); break;case 3: scan.Check(a, n, position); break;case 4: cscan.Check(a, n, position); break; }} }

第三步,創(chuàng)建一個SCAN類

public class SCAN {public int m=0; //用來存放磁頭的初始位置public boolean Run=true;public int sum=0;public void Check(int a[],int n,int position){int temp; for (int i = n; i > 0; i--) // 冒泡排序{ for (int j = 0; j < i; j++){if (a[j] > a[j + 1]) // 按順序依次比較大小{ temp = a[j]; // 把大的數(shù)字往前面放a[j] = a[j + 1];a[j + 1] = temp; } } }while (Run) {//此循環(huán)用來尋找磁頭的初始位置被排到了什么位置for (int i = 0; i <= n; i++){ if (a[i] == position) {m = i;Run = false;}}}System.out.println("SCAN算法序列:");for(int i=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(int i=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);}}

第四步,創(chuàng)建一個SSTF類

public class SSTF {public int m; // 用來判斷排序后 磁頭所在的初始位置的下標public int b[]; public int rflag = 0, lflag = 0;public double SUM=0; public int mleft, mright;public SSTF(){ b=new int[20]; }public void Calculate(int a[], int n, int position){int temp;for (int i = n; i > 0; i--) // 冒泡排序{for (int j = 0; j < i; j++){if (a[j] > a[j + 1]) // 按順序依次比較大小{ temp = a[j]; // 把大的數(shù)字往前面放a[j] = a[j + 1];a[j + 1] = temp; }}}if (a[n] == position) {//如果磁頭的初始位置在最大號System.out.println("SSTF序列為:");for (int i = 0; i <= n; i++){ System.out.print(a[i] + " ");}}else if (a[0] == position){ System.out.println("SSTF序列為:");for (int i = n; i >= 0; i--){ System.out.print(a[i] + " ");}}else {System.out.println("SSTF序列為:");Check(a, n, position);}}public void Check(int a[], int n, int position){boolean Run = true, Running = true;while (Run) {//此循環(huán)用來尋找磁頭的初始位置被排到了什么位置for (int i = 0; i <= n; i++){if (a[i] == position){m = i;System.out.println("m的值為" + m);mleft = m - 1;mright = m + 1;Run = false;}}}while (Running){if (a[m] - a[mleft] >= a[mright] - a[m] && rflag != 1){SUM=SUM+(a[mright] - a[m]); //用來統(tǒng)計尋到長度m=mright;mright++;if (mright > n){rflag = 1;}System.out.print(a[m] + " ");}else if (a[m] - a[mleft] < a[mright] - a[m] && lflag != 1){ SUM=SUM+(a[m] - a[mleft]);m = mleft;mleft--;if (mleft < 0){lflag = 1;}System.out.print(a[m] + " ");}if (mleft != 0 && mright > n){Running = false;SUM=SUM+a[n]-a[mleft];for (int j = mleft; j >= 0; j--) {if(j!=0){SUM=SUM+a[j]-a[j-1]; }System.out.print(a[j] + " ");}}if (mright != n && mleft < 0){Running = false;SUM=SUM+a[mright]-a[0];for (int k = mright; k <= n; k++){if(k!=0){SUM=SUM+a[k+1]-a[k];}System.out.print(a[k] + " ");}}}System.out.println();System.out.println("sum的值為"+SUM);System.out.println("平均尋到長度為"+SUM/n); }}

總結

以上是生活随笔為你收集整理的磁盘调度算法java代码的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。