FCFS,SJF(java实现)

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

} 

}

转载于:https://my.oschina.net/u/2538590/blog/537458

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值