您的位置:首页 > 编程语言 > Java开发

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("系统已退出!");

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: