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