先来先服务
import java.text.DecimalFormat; import java.util.Scanner; public class bank { //先到先服务 public static void main(String[] args) { // TODO Auto-generated method stub Scanner input=new Scanner(System.in); DecimalFormat df = new DecimalFormat("######0.0"); //保留两位小数 //System.out.println("作业 到达时间 服务时间 开始时间 完成时间 周转时间 带权周转时间"); System.out.print("请输入进程个数:"); int num=input.nextInt(); double[] get=new double[num]; //建立作业到达时间数组 double[] run=new double[num]; //建立作业服务时间到达数组 double[] begin=new double[num]; //建立开始时间数组 double[] ok=new double[num]; //建立完成时间数组 double[] zz=new double[num]; //建立周转时间数组 double[] time=new double[num]; //建立带全周转时间数组 double[] aa=new double[num]; //建立作业时间大小比较,将作业号存入 int[] bb=new int[num]; //存储作业号 double cc; int zy; for (int i=1;i<=num;i++){ System.out.print("请输入第"+i+"个作业的到达时间:"); get[i-1]=input.nextDouble(); //讲到达时间放入数组 System.out.print("请输入第"+i+"个作业的服务时间:"); run[i-1]=input.nextDouble(); //将服务时间放入数组 } /*------------到达时间,服务时间存入数组,完成数据的初始化-------------------*/ for (int i=1;i<=num;i++){ aa[i-1]=get[i-1]; } for (int i=1;i<=num;i++){ if (i==1){ begin[i-1]=get[i-1]; //对开始时间进行复制 ok[i-1]=begin[i-1]+run[i-1]; //对完成时间进行赋值 zz[i-1]=ok[i-1]-get[i-1]; //周转时间赋值 time[i-1]=zz[i-1]/run[i-1]; //平均周转时间 } else{ for (int j=1;j<num-1;j++){ //对到达作业时间进行排序 for (int k=j+1;k<num;k++) if (aa[j]>aa[k]){ cc=aa[j]; aa[j]=aa[k]; aa[k]=cc; } } for (int m=1;m<num;m++){ //获取到到达时间比较后的作业号 for (int n=1;n<num;n++){ if (aa[m]==get[n]){ bb[m-1]=n; } } } if (i==2){ //第二个作业是以第一个作业为基础进行更改 zy=bb[i-2]; begin[zy]=ok[0]; ok[zy]=begin[zy]+run[zy]; zz[zy]=ok[zy]-get[zy]; time[zy]=zz[zy]/run[zy]; } else{ //第三个作业及以后,以前一个到达时间短的作业为基础更改 zy=bb[i-2]; begin[zy]=ok[(bb[i-2-1])]; ok[zy]=begin[zy]+run[zy]; zz[zy]=ok[zy]-get[zy]; time[zy]=zz[zy]/run[zy]; } } } System.out.println("作业 到达时间 服务时间 开始时间 完成时间 周转时间 带权周转时间"); for (int i=1;i<=num;i++){ System.out.println(i+" "+df.format(get[i-1])+" "+df.format(run[i-1])+" "+df.format(begin[i-1])+" "+df.format(ok[i-1])+" "+df.format(zz[i-1])+" "+df.format(time[i-1])+" "); } } }短作业优先
import java.text.DecimalFormat; import java.util.Scanner; public class first { //短作业优先 public static void main(String[] args) { // TODO Auto-generated method stub Scanner input=new Scanner(System.in); DecimalFormat df = new DecimalFormat("######0.0"); //保留两位小数 //System.out.println("作业 到达时间 服务时间 开始时间 完成时间 周转时间 带权周转时间"); System.out.print("请输入进程个数:"); int num=input.nextInt(); double[] get=new double[num]; //建立作业到达时间数组 double[] run=new double[num]; //建立作业服务时间到达数组 double[] begin=new double[num]; //建立开始时间数组 double[] ok=new double[num]; //建立完成时间数组 double[] zz=new double[num]; //建立周转时间数组 double[] time=new double[num]; //建立带全周转时间数组 double[] aa=new double[num]; //服务时间大小比较,将作业号存入 int[] bb=new int[num]; //存储作业号 double cc; int zy; for (int i=1;i<=num;i++){ System.out.print("请输入第"+i+"个作业的到达时间:"); get[i-1]=input.nextDouble(); //讲到达时间放入数组 System.out.print("请输入第"+i+"个作业的服务时间:"); run[i-1]=input.nextDouble(); //将服务时间放入数组 } /*------------到达时间,服务时间存入数组,完成数据的初始化-------------------*/ for (int i=1;i<=num;i++){ aa[i-1]=run[i-1]; } for(int i=1;i<=num;i++){ if (i==1){ begin[i-1]=get[i-1]; //对开始时间进行复制 ok[i-1]=begin[i-1]+run[i-1]; //对完成时间进行赋值 zz[i-1]=ok[i-1]-get[i-1]; //周转时间赋值 time[i-1]=zz[i-1]/run[i-1]; //平均周转时间 } else{ for (int j=1;j<num-1;j++){ //对服务时间进行排序 for (int k=j+1;k<num;k++) if (aa[j]>aa[k]){ cc=aa[j]; aa[j]=aa[k]; aa[k]=cc; } } for (int m=1;m<num;m++){ //获取到服务时间比较后的作业号 for (int n=1;n<num;n++){ if (aa[m]==run[n]){ bb[m-1]=n; } } } if (i==2){ //第二个作业是以第一个作业为基础进行更改 zy=bb[i-2]; begin[zy]=ok[0]; ok[zy]=begin[zy]+run[zy]; zz[zy]=ok[zy]-get[zy]; time[zy]=zz[zy]/run[zy]; } else{ //第三个作业及以后,以前一个服务短的作业为基础更改 zy=bb[i-2]; begin[zy]=ok[(bb[i-2-1])]; ok[zy]=begin[zy]+run[zy]; zz[zy]=ok[zy]-get[zy]; time[zy]=zz[zy]/run[zy]; } } } System.out.println("作业 到达时间 服务时间 开始时间 完成时间 周转时间 带权周转时间"); for (int i=1;i<=num;i++){ System.out.println(i+" "+df.format(get[i-1])+" "+df.format(run[i-1])+" "+df.format(begin[i-1])+" "+df.format(ok[i-1])+" "+df.format(zz[i-1])+" "+df.format(time[i-1])+" "); } } }可能存在一些bug,自行查找和修改