import [Link].
*;
class Process {
int id;
int arrivalTime;
int burstTime;
public Process(int id, int arrivalTime, int burstTime) {
[Link] = id;
[Link] = arrivalTime;
[Link] = burstTime;
public class SJFScheduling {
public static void main(String[] args) {
List<Process> processes = new ArrayList<>();
[Link](new Process(1, 0, 3));
[Link](new Process(2, 1, 5));
[Link](new Process(3, 2, 2));
[Link](new Process(4, 3, 6));
sjfScheduling(processes);
public static void sjfScheduling(List<Process> processes) {
PriorityQueue<Process> queue = new PriorityQueue<>([Link](p ->
[Link]));
int currentTime = 0;
int totalWaitingTime = 0;
while (![Link]() || ![Link]()) {
if (![Link]() && [Link](0).arrivalTime <= currentTime) {
[Link]([Link](0));
continue;
if ([Link]()) {
currentTime = [Link](0).arrivalTime;
continue;
Process currentProcess = [Link]();
totalWaitingTime += currentTime - [Link];
currentTime += [Link];
[Link]("Process " + [Link] + " completed at time " + currentTime);
[Link]("Average waiting time: " + (double) totalWaitingTime / (double) [Link]());