第一步,创建一个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]; // 把大的数字往前面放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);   }
}

第二步,创建一个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("请输入磁盘请求的个数:");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、最短寻道时间优先算法(SSTF)");System.out.println("3、扫描算法(SCAN)");System.out.println("4、循环扫描算法(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;     }}
}

第三步,创建一个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]; // 把大的数字往前面放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("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);}}

第四步,创建一个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]; // 把大的数字往前面放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) {//此循环用来寻找磁头的初始位置被排到了什么位置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]); //用来统计寻到长度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代码相关推荐

  1. 进程调度算法Java代码

    第一步:创建一个found类 import java.util.ArrayList;class Found {ArrayList<PCB> sequnce;//创建就绪队列PCB pcb[ ...

  2. 用Java代码计算磁盘里的文件大小

    用Java代码计算磁盘里的文件大小 原理 代码展示 总结 原理 拿到一个文件后我们需要先判断文件是不是标准文件调用isFile()方法,如果是标准文件直接调用length()方法求文件大小,不是标准文 ...

  3. java 硬盘卷标号,java获得磁盘的卷标,java获得磁盘卷标,Java代码获得磁盘卷标

    java获得磁盘的卷标,java获得磁盘卷标,Java代码获得磁盘卷标 Java代码获得磁盘卷标import java.io.*;import javax.swing.filechooser.*;pu ...

  4. 从本地磁盘取出excel模板 java代码

    从本地磁盘取出excel模板 java代码 /*** Title: 导出资源预编模板Excel* @param session* @param response* @throws Exception* ...

  5. 【Swing编写图形用户界面】操作系统之磁盘调度算法图形界面和性能比较

    文章目录 1 项目地址 2 界面 3 比较代码 1 项目地址 Here! 用java gui界面实现了几种磁盘调度算法. 2 界面 175 52 157 36 159 106 108 72 3 比较代 ...

  6. java JLabel改变大小后如何刷新_到底一行java代码是如何在计算机上执行的

    不知道你是否思考过,每次我们在IDEA中右键Run Application启动主方法,假如程序运行正常,控制台也打印出了你所要打印的信息,在这个过程中你知道这台计算机上那些硬件及其软件都是以什么样的方 ...

  7. 编写高性能Java代码的最佳实践

    编写高性能Java代码的最佳实践 摘要:本文首先介绍了负载测试.基于APM工具的应用程序和服务器监控,随后介绍了编写高性能Java代码的一些最佳实践.最后研究了JVM特定的调优技巧.数据库端的优化和架 ...

  8. 多种负载均算法及其 Java 代码实现 --转

    原文地址:https://www.oschina.net/news/81750/variety-pf-load-balancing-algorithm-and-its-java-code 首先给大家介 ...

  9. 买什么数据结构与算法,这里有:动态图解十大经典排序算法(含JAVA代码实现)

    上篇的动图数据结构反响不错,这次来个动图排序算法大全.数据结构与算法,齐了. 几张动态图捋清Java常用数据结构及其设计原理 本文将采取动态图+文字描述+正确的java代码实现来讲解以下十大排序算法: ...

最新文章

  1. word2vec代码_TensorFlow2.0 代码实战专栏(四):Word2Vec (Word Embedding)
  2. hp-ux_UX中的格式塔-或-为什么设计师如此讨厌间距
  3. C++描述杭电OJ 2008.数值统计 ||
  4. 精打细算使用MaxCompute搭建数仓
  5. android adb apk包名,ADB命令简单使用--查看包名、activity等
  6. UVA - 1588 ​​​​​​​Kickdown
  7. java单线程上锁_关于Java多线程编程锁优化的深入学习
  8. 百度,淘宝,腾讯三大巨头HTML页面规范分解
  9. SQLiteDatabase中query、insert、update、delete方法参数说明
  10. Nginx 实现封杀恶意访问
  11. Linux-安装python3环境
  12. 数据结构-图的应用-拓扑排序
  13. can not find Artifact XXX 的原因
  14. mysql的三表查询语句_求三表联合查询的SQL查询语句
  15. 系统分析师-论文(论系统分析中对用户需求的把握、论信息系统开发方法及其应用)
  16. 【大数据】分布式机器学习平台
  17. https请求,报错Could not establish trust relationship for the SSL/TLS secure channel
  18. MySQL入门系列:查询简介(二)
  19. AndroidN多窗口支持
  20. Ip2region 离线IP地址定位库

热门文章

  1. node.js require 自动执行脚本 并生成html,利用node.js实现自动生成前端项目组件的方法详解...
  2. Py之pixellib:pixellib库的简介、安装、经典案例之详细攻略
  3. Tool/IDE之MinGW:MinGW(C++环境)的简介、安装、使用方法之详细攻略
  4. DL之NIN:Network in Network算法的简介(论文介绍)、架构详解、案例应用等配图集合之详细攻略
  5. ML之xgboostGBM:基于xgboostGBM算法对HiggsBoson数据集(Kaggle竞赛)训练(两模型性能PK)实现二分类预测
  6. OpenGL ES 如何能看到一个物体内部和象3dmax中能只显示网格线
  7. 18.28 getchar()函数与缓冲区问题
  8. JSP中内置对象pageContent的使用
  9. 第二阶段团队项目冲刺第七天
  10. 关于java的JIT知识