最近期末,计算机操作系统课程设计需要实现----磁盘调度算法。就使用Java写个图形界面的磁盘调度算法。
实现磁盘调度的四种算法:
先来先服务算法(FCFS)
最短寻道时间优先算法(SSTF)
扫描算法(SCAN)
循环扫描算法(C-SCAN)
实现原理:数组的排序,画笔的绘制
运行截图:
代码如下:复制即用
package com.huang;
import java.awt.*;
import java.awt.event.*;
import java.util.Arrays;
import java.util.List;
import java.util.Scanner;
import java.util.stream.Collectors;
import javax.swing.*;
public class Demo extends Jframe implements ActionListener{ //主面板
JButton btnFCFS; //先来先服务算法(FCFS)
JButton btnSSTF; //最短寻道时间优先算法(SSTF)
JButton btnSCAN; //扫描算法(SCAN)
JButton btnCSCAN; //循环扫描算法(C-SCAN)
JPanel jMainPanel = new JPanel(); //按钮面板
JPanel buttons = new JPanel(); //绘图面板
JLabel jLabel1;
JLabel jLabel2;
StringBuffer s;
int start;
int[] arr;
int fcfsNUM=0;
int sstfNUM=0;
int scanNUM=0;
int cscanNUM=0;
public Demo(){
}
public Demo(int start, int[] arr){
super("绘制形状");
this.start=start;
this.arr=arr;
StringBuffer stringBuffer=new StringBuffer();
for (int tt=0;tt resultList = Arrays.stream(arr).boxed().collect(Collectors.toList());//最短寻道时间优先算法(SSTF)
int min=300;
int temp1 = 0;
int jiLuID=0;
int start1=start;
int[] newArr=new int[10];
for (int i=0;i=Math.abs((int)(resultList.get(j))-start1)){
min=Math.abs((int)(resultList.get(j))-start1);
temp1=(int)resultList.get(j);
jiLuID=j;
}
}
newArr[i]=temp1;
min=300;
resultList.remove(jiLuID);
start1=temp1;
}
int sstfNUM=0;
int temp2=start;
for (int i=0;i0;j--){
newArrscan[pp-j]=scanArr[j-1];
}
newArrscan[pp]=0;
for (int o=pp+1,h=pp;h0;j--){
newArrcscan[12-j]=cscan[d];d++;
}
int cscanNUM=0;
int temp4=start;
for (int rr=0;rr resultList = Arrays.stream(x).boxed().collect(Collectors.toList());
int min=300;
int temp = 0;
int jiLuID=0;
int[] newArr=new int[10];
for (int i=0;i=Math.abs((int)(resultList.get(j))-start)){
min=Math.abs((int)(resultList.get(j))-start);
temp=(int)resultList.get(j);
jiLuID=j;
}
}
newArr[i]=temp;
min=300;
resultList.remove(jiLuID);
start=temp;
}
this.x = newArr;
}
public void paintComponent(Graphics g){
g.drawString(String.valueOf(start),start*4+2,10);
g.drawLine(start*4, 0,x[0]*4,20);
g.drawLine(x[0]*4,20 ,x[1]*4,40 );
g.drawLine(x[1]*4,40 ,x[2]*4,60 );
g.drawLine(x[2]*4,60 ,x[3]*4,80 );
g.drawLine(x[3]*4,80 ,x[4]*4,100);
g.drawLine(x[4]*4,100,x[5]*4,120);
g.drawLine(x[5]*4,120,x[6]*4,140);
g.drawLine(x[6]*4,140,x[7]*4,160);
g.drawLine(x[7]*4,160,x[8]*4,180);
g.drawLine(x[8]*4,180,x[9]*4,200);
for (int i=0;i0;j--){
newArr[i-j]=x[j-1];
}
newArr[i]=0;
for (int o=i+1,h=i;h0;j--){
newArr[12-j]=x[d];d++;
}
this.x =newArr;
}
public void paintComponent(Graphics g){
g.drawString(String.valueOf(start),start*4+2,10);
g.drawLine(start*4, 0,x[0]*4,20);
g.drawLine(x[0]*4,20 ,x[1]*4,40 );
g.drawLine(x[1]*4,40 ,x[2]*4,60 );
g.drawLine(x[2]*4,60 ,x[3]*4,80 );
g.drawLine(x[3]*4,80 ,x[4]*4,100);
g.drawLine(x[4]*4,100,x[5]*4,120);
g.drawLine(x[5]*4,120,x[6]*4,140);
g.drawLine(x[6]*4,140,x[7]*4,160);
g.drawLine(x[7]*4,160,x[8]*4,180);
g.drawLine(x[8]*4,180,x[9]*4,200);
g.drawLine(x[9]*4,200,x[10]*4,220);
g.drawLine(x[10]*4,220,x[11]*4,240);
for (int i=0;i 


