SPOS - Shortest Job First [SJF] Program

Shortest Job First Program

Code :

import java.util.Arrays;
import java.util.Comparator;
import java.util.Scanner;
public class SJFScheduling {
 public static int[] waitingTimeSJF(int[] burstTimes) {
 int[] waitingTimes = new int[burstTimes.length];
 for (int i = 0; i < burstTimes.length; i++) {
 if (i == 0) {
 waitingTimes[i] = 0;
 continue;
 }
 waitingTimes[i] = waitingTimes[i-1] + burstTimes[i-1];
 }
 return waitingTimes;
 }
 public static int[] turnAroundTimeSJF(int[] burstTimes, int[] waitingTimes) {
 int[] turnAroundTimes = new int[burstTimes.length];
 for (int i = 0; i < burstTimes.length; i++) {
 turnAroundTimes[i] = waitingTimes[i] + burstTimes[i];
 }
 return turnAroundTimes;
 }
 public static float averageWaitingTime(int[] waitingTimes) {
 int totalSum = 0;
 for (int waitingTime : waitingTimes) {
 totalSum += waitingTime;
 }
 return (float) totalSum/waitingTimes.length;
 }
 public static int[][] sortProcesses(int[] processIDs, int[] burstTimes) {
 int [][]arr = new int[burstTimes.length][2];
 for (int i = 0; i < burstTimes.length; i++) {
 arr[i][0] = processIDs[i];
 arr[i][1] = burstTimes[i];
 }
 Arrays.sort(arr, Comparator.comparingInt(o -> o[1]));
 return arr;
 }
 public static void main(String[] args) {
 Scanner myScanner = new Scanner(System.in);
 System.out.print("Enter total number of processes: ");
 int totalNumProcesses = myScanner.nextInt();
 int[] processIds = new int[totalNumProcesses];
 int[] burstTimes = new int[totalNumProcesses];
 for (int i = 0; i < totalNumProcesses; i++) {
 System.out.print("Enter Process id: ");
 processIds[i] = myScanner.nextInt();
 System.out.print("Enter Burst Time: ");
 burstTimes[i] = myScanner.nextInt();
 }
 int[][] arrays = sortProcesses(processIds, burstTimes);
 for (int i = 0; i < burstTimes.length; i++) {
 processIds[i] = arrays[i][0];
 burstTimes[i] = arrays[i][1];
 }
 int[] waitingTimes = waitingTimeSJF(burstTimes);
 int[] turnAroundTimes = turnAroundTimeSJF(burstTimes, waitingTimes);
 float avgWaitingTime = averageWaitingTime(waitingTimes);
 System.out.format("%4s%4s%4s%4s\n", "pid", "bt", "wt", "tat");
 for (int i = 0; i < totalNumProcesses; i++) {
 System.out.format("%4d%4d%4d%4d\n", processIds[i], burstTimes[i], waitingTimes[i],
turnAroundTimes[i]);
 }
 System.out.println("The average waiting time is: " + avgWaitingTime);
 }
}

Output :



Your review for this post?