Java实现响应比算法
时间: 2023-09-23 11:11:12 浏览: 32
下面是一个简单的Java实现响应比算法的例子:
```java
import java.util.*;
public class ResponseRatioScheduling {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("请输入进程数量:");
int n = sc.nextInt();
Process[] processes = new Process[n];
for (int i = 0; i < n; i++) {
System.out.print("请输入第" + (i + 1) + "个进程的服务时间和到达时间:");
int serviceTime = sc.nextInt();
int arrivalTime = sc.nextInt();
processes[i] = new Process(i + 1, serviceTime, arrivalTime);
}
Arrays.sort(processes, new Comparator<Process>() {
@Override
public int compare(Process o1, Process o2) {
return o1.arrivalTime - o2.arrivalTime;
}
});
int currentTime = 0;
double totalWaitTime = 0;
double totalTurnaroundTime = 0;
System.out.println("进程执行顺序:");
while (true) {
int index = -1;
double maxRatio = -1;
for (int i = 0; i < n; i++) {
if (!processes[i].visited && processes[i].arrivalTime <= currentTime) {
double ratio = 1 + (currentTime - processes[i].arrivalTime) / (double) processes[i].serviceTime;
if (ratio > maxRatio) {
maxRatio = ratio;
index = i;
}
}
}
if (index == -1) {
if (currentTime == 0) {
System.out.println("暂无进程可执行");
}
break;
}
Process currentProcess = processes[index];
currentProcess.visited = true;
currentTime += currentProcess.serviceTime;
totalWaitTime += currentTime - currentProcess.arrivalTime - currentProcess.serviceTime;
totalTurnaroundTime += currentTime - currentProcess.arrivalTime;
System.out.print("P" + currentProcess.id + " ");
}
System.out.println();
System.out.println("平均等待时间:" + totalWaitTime / n);
System.out.println("平均周转时间:" + totalTurnaroundTime / n);
}
}
class Process {
int id;
int serviceTime;
int arrivalTime;
boolean visited;
public Process(int id, int serviceTime, int arrivalTime) {
this.id = id;
this.serviceTime = serviceTime;
this.arrivalTime = arrivalTime;
this.visited = false;
}
}
```
在上述代码中,我们首先定义了一个Process类,用于表示进程的基本信息,包括进程ID、服务时间、到达时间和是否访问过等属性。
然后,我们通过读取用户输入的方式获取所有进程的信息,并按照到达时间进行排序。
接着,我们使用一个while循环来依次选取响应比最高的进程进行执行,直到所有进程都被访问过为止。
在每次选取进程时,我们首先遍历所有未访问过的进程,并计算它们的响应比。如果有进程的到达时间小于或等于当前时间,我们就选取其中响应比最高的进程进行执行。如果没有符合条件的进程,则说明当前时间没有进程需要执行,我们就跳出循环。
在每次选取进程后,我们更新当前时间、统计等待时间和周转时间,并将当前进程标记为已访问。最后,我们输出进程的执行顺序以及平均等待时间和平均周转时间。
需要注意的是,该代码仅为一个简单的实现示例,实际应用中可能需要进行更多的优化和改进。