用java写一个FCFS算法
时间: 2024-05-14 09:16:49 浏览: 59
作业调度算法FCFS
首先,FCFS算法是先来先服务的调度算法,也称先到先服务调度算法,是一种非抢占式调度算法。在多道程序环境下,当一个作业提交后,便将它按提交的先后次序放入后备队列中,当处理机空闲时,从后备队列中选择等待时间最长的作业进行处理。
以下是用Java实现FCFS算法的代码:
```java
import java.util.Scanner;
public class FCFS {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("请输入作业数量:");
int n = sc.nextInt();
int[] arrivalTime = new int[n];
int[] serviceTime = new int[n];
int[] finishTime = new int[n];
int[] turnaroundTime = new int[n];
int[] waitingTime = new int[n];
float avgTurnaroundTime, avgWaitingTime;
for (int i = 0; i < n; i++) {
System.out.print("请输入第" + (i + 1) + "个作业的到达时间和服务时间:");
arrivalTime[i] = sc.nextInt();
serviceTime[i] = sc.nextInt();
}
finishTime[0] = arrivalTime[0] + serviceTime[0];
turnaroundTime[0] = finishTime[0] - arrivalTime[0];
waitingTime[0] = turnaroundTime[0] - serviceTime[0];
for (int i = 1; i < n; i++) {
if (arrivalTime[i] > finishTime[i - 1]) {
finishTime[i] = arrivalTime[i] + serviceTime[i];
} else {
finishTime[i] = finishTime[i - 1] + serviceTime[i];
}
turnaroundTime[i] = finishTime[i] - arrivalTime[i];
waitingTime[i] = turnaroundTime[i] - serviceTime[i];
}
System.out.println("作业\t到达时间\t服务时间\t完成时间\t周转时间\t等待时间");
for (int i = 0; i < n; i++) {
System.out.println((i + 1) + "\t" + arrivalTime[i] + "\t\t" + serviceTime[i] + "\t\t" + finishTime[i] + "\t\t" + turnaroundTime[i] + "\t\t" + waitingTime[i]);
}
int sumTurnaroundTime = 0, sumWaitingTime = 0;
for (int i = 0; i < n; i++) {
sumTurnaroundTime += turnaroundTime[i];
sumWaitingTime += waitingTime[i];
}
avgTurnaroundTime = (float) sumTurnaroundTime / n;
avgWaitingTime = (float) sumWaitingTime / n;
System.out.println("平均周转时间为:" + avgTurnaroundTime);
System.out.println("平均等待时间为:" + avgWaitingTime);
}
}
```
这段代码中,先定义了一个Scanner对象,用于读取用户输入的数据。接着,读入作业的数量和每个作业的到达时间和服务时间,然后计算每个作业的完成时间、周转时间和等待时间,并将结果输出。最后,计算所有作业的平均周转时间和平均等待时间,并将结果输出。
注意:这段代码中的平均周转时间和平均等待时间均采用了float类型,需要在计算时进行类型转换。
阅读全文