FCFS,SJF(java实现)
2015-11-30 00:00
489 查看
摘要: 转载
import java.io.BufferedReader; import java.io.InputStreamReader; public class FCFSANDSJF { private static int i; private int j; private int temp; private int m[]; private int n[]; private int process_number;//进程数 private int arrival_time[];//到达时间 private int services_time[];//服务时间 private int start_time[];//开始时间 private int completion_time[];//完成时间 private int turn_around_time[];//周转时间 private double add1; private double add2; private double add3; private double add4; private double right_turn_around_time[]; private void FCFS(){ System.out.println("\n===FCFS先来先服务算法==="); System.out.println("\n到达时间是:"); for(i=0;i<process_number;i++){ System.out.print(arrival_time[i]+"\t"); } System.out.println("\n服务时间是:"); for(i=0;i<process_number;i++){ System.out.print(services_time[i]+"\t"); } System.out.println("\n开始时间是:"); for(i=0;i<process_number;i++){ n[i]=arrival_time[i]; m[i]=i; } for(i=0;i<process_number-1;i++){ for(j=i+1;j<process_number;j++){ if(n[i]>n[j]){ temp=n[i]; n[i]=n[j]; n[j]=temp; temp=m[i]; m[i]=m[j]; m[j]=temp; } } } start_time[m[0]]=arrival_time[m[0]]; for(i=1;i<process_number;i++){ if(arrival_time[m[i]]<start_time[m[i-1]]+services_time[m[i-1]]) start_time[m[i]]=start_time[m[i-1]]+services_time[m[i-1]]; else start_time[m[i]]=arrival_time[m[i]]; } for(i=0;i<process_number;i++){ System.out.print(start_time[i]+"\t"); } System.out.println("\n完成时间是:"); for(i=0;i<process_number;i++){ completion_time[i]=start_time[i]+services_time[i]; } for(i=0;i<process_number;i++){ System.out.print(completion_time[i]+"\t"); } System.out.println("\n周转时间是:"); for(i=0;i<process_number;i++){ turn_around_time[i]=completion_time[i]-arrival_time[i]; } for(i=0;i<process_number;i++){ System.out.print(turn_around_time[i]+"\t"); } add1=0; for(i=0;i<process_number;i++){ add1=add1+turn_around_time[i]; } System.out.println("\n平均周转时间是:"+add1/process_number); System.out.println("\n带权周转时间是:"); for(i=0;i<process_number;i++){ right_turn_around_time[i]=turn_around_time[i]*1.0/services_time[i]; } for(i=0;i<process_number;i++){ System.out.print(right_turn_around_time[i]+"\t"); } System.out.println("\n平均带权周转时间是:"); add2=0; for(i=0;i<process_number;i++){ add2=add2+right_turn_around_time[i]; } System.out.println(add2/process_number); } private void SJF(){ System.out.println("\n===SJF:短作业优先算法==="); System.out.println("\n到达时间是:"); for(i=0;i<process_number;i++){ System.out.print(arrival_time[i]+"\t"); } System.out.println("\n服务时间是:"); for(i=0;i<process_number;i++){ System.out.print(services_time[i]+"\t"); } System.out.println("\n开始时间是:"); m[0]=0; for(i=0;i<process_number-1;i++){ if(arrival_time[i]>arrival_time[i+1]) m[0]=i+1; } for(i=0;i<process_number;i++){ n[i]=services_time[i]; m[i+1]=i; } for(i=0;i<process_number-1;i++){ for(j=i+1;j<process_number;j++){ if(n[i]>n[j]){ temp=n[i]; n[i]=n[j]; n[j]=temp; temp=m[i+1]; m[i+1]=m[j+1]; m[j+1]=temp; } } } for(i=1;i<process_number+1;i++){ if(m[0]==m[i]){ for(j=i;j<process_number;j++){ m[j]=m[j+1]; } } } start_time[m[0]]=arrival_time[m[0]]; for(i=1;i<process_number;i++){ if(arrival_time[m[i]]<start_time[m[i-1]]+services_time[m[i-1]]) start_time[m[i]]=start_time[m[i-1]]+services_time[m[i-1]]; else start_time[m[i]]=arrival_time[m[i]]; } for(i=0;i<process_number;i++){ System.out.print(start_time[i]+"\t"); } System.out.println("\n完成时间是:"); for(i=0;i<process_number;i++){ completion_time[i]=start_time[i]+services_time[i]; } for(i=0;i<process_number;i++){ System.out.print(completion_time[i]+"\t"); } System.out.println("\n周转时间是:"); for(i=0;i<process_number;i++){ turn_around_time[i]=completion_time[i]-arrival_time[i]; } for(i=0;i<process_number;i++){ System.out.print(turn_around_time[i]+"\t"); } add3=0; for(i=0;i<process_number;i++){ add3=add3+turn_around_time[i]; } System.out.println("\n平均周转时间是:"+add3/process_number); System.out.println("\n带权周转时间是:"); for(i=0;i<process_number;i++){ right_turn_around_time[i]=turn_around_time[i]*1.0/services_time[i]; } for(i=0;i<process_number;i++){ System.out.print(right_turn_around_time[i]+"\t"); } System.out.println("\n平均带权周转时间是:"); add4=0; for(i=0;i<process_number;i++){ add4=add4+right_turn_around_time[i]; } System.out.println(add4/process_number); } public static void main(String[] args) throws Exception{ System.out.println("请输入进程数:"); FCFSANDSJF wo=new FCFSANDSJF(); BufferedReader buf=null; buf=new BufferedReader(new InputStreamReader(System.in)); String str1=null; str1=buf.readLine(); wo.process_number=Integer.parseInt(str1); wo.arrival_time=new int[wo.process_number]; wo.services_time=new int[wo.process_number]; wo.start_time=new int[wo.process_number+1]; wo.completion_time=new int[wo.process_number+1]; wo.turn_around_time=new int[wo.process_number+1]; wo.right_turn_around_time=new double[wo.process_number+1]; wo.m=new int[wo.process_number+1]; wo.n=new int[wo.process_number]; String str=null; String str2=null; System.out.println("\n请输入各进程到达时间"); for(i=0;i<wo.process_number;i++){ str=buf.readLine(); wo.arrival_time[i]=Integer.parseInt(str); } System.out.println("\n请输入各个进程服务时间"); for(i=0;i<wo.process_number;i++){ str2=buf.readLine(); wo.services_time[i]=Integer.parseInt(str2); } System.out.println("该进程数为"+wo.process_number); System.out.println("\n到达时间为"); for(i=0;i<wo.process_number;i++){ System.out.print(wo.arrival_time[i]+"\t"); } System.out.println("\n服务时间为:"); for(i=0;i<wo.process_number;i++){ System.out.print(wo.services_time[i]+"\t"); } System.out.println("\n======先来先服务【0】========"); System.out.println("\n======短作业优先【1】========"); System.out.println("\n======退出系统【2】========"); String str3=null; str3=buf.readLine(); i=Integer.parseInt(str3); while(i!=2){ switch(i){ case 0: wo.FCFS(); break; case 1: wo.SJF(); break; default: System.out.println("\n输入有误,请重新输入"); } System.out.println("\n======先来先服务【0】========"); System.out.println("\n======短作业优先【1】========"); System.out.println("\n======退出系统【2】========"); str3=buf.readLine(); i=Integer.parseInt(str3); } System.out.println("系统已退出!"); } }
相关文章推荐
- Eclipse 使用技巧
- 利用SpringMVC框架提供的方法,做文件上传和下载操作
- Spring事务管理的三种方式
- spring quartz定时任务
- 整理的JAVA相关框架
- Spring MVC学习路(一) 下载配置文件
- Spring MVC学习路(二) 设置配置文件
- Spring MVC学习路(三) 编写第一个demo
- Spring MVC学习路(四)了解DispatcherServlet作用
- Java日志框架slf4j API介绍及异常接口实现分析
- java中HashMap详解
- Java中先按照姓名排序在按照年龄排序 代码
- Java接口和抽象类
- Java记录 -90- 静态代理模式深度剖析
- Java标准标签库(JSTL)
- java第四天
- java中的异常类型
- Java中常见的Exceptions
- 使用RxJava 提升用户体验
- 新Java运动:测试驱动开发3---用户注册3