I am a university student working on a Operating System Project and currently trying to implement a Priority CPU Scheduling Algorithm in Java but I am getting the wrong output.
I don't know why I am getting the wrong output but here is the code.
Please look at it and tell me what is wrong with it
package cpuscheduling;import java.util.*;class Process { int id; int arrivalTime; int burstTime; int priority; int startTime; int endTime; public Process(int id, int arrivalTime, int burstTime, int priority) { this.id = id; this.arrivalTime = arrivalTime; this.burstTime = burstTime; this.priority = priority; }}public class CPUScheduling { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.print("Enter the number of processes: "); int n = scanner.nextInt(); Process[] processes = new Process[n]; System.out.println("Enter the arrival time, burst time, and priority for each process:"); for (int i = 0; i < n; i++) { System.out.println("Process " + (i + 1) +":"); System.out.print("Arrival Time: "); int arrivalTime = scanner.nextInt(); System.out.print("Burst Time: "); int burstTime = scanner.nextInt(); System.out.print("Priority: "); int priority = scanner.nextInt(); processes[i] = new Process(i + 1, arrivalTime, burstTime, priority); } Arrays.sort(processes, Comparator.comparingInt(p -> p.arrivalTime)); int currentTime = 0; int totalWaitingTime = 0; int totalTurnaroundTime = 0; int contextSwitches = 0; for (int i = 0; i < n; i++) { Process currentProcess = processes[i]; if (currentTime < currentProcess.arrivalTime) { contextSwitches++; currentTime = currentProcess.arrivalTime; } currentProcess.startTime = currentTime; currentTime += currentProcess.burstTime; currentProcess.endTime = currentTime; totalWaitingTime += (currentProcess.startTime - currentProcess.arrivalTime); totalTurnaroundTime += (currentProcess.endTime - currentProcess.arrivalTime); } double averageWaitingTime = (double) totalWaitingTime / n; double averageTurnaroundTime = (double) totalTurnaroundTime / n; double throughput = (double) n / currentTime; // Display the results System.out.println("\nGantt Chart:"); displayGanttChart(processes); System.out.println("\nWaiting Time:"); displayWaitingTimes(processes); System.out.println("\nAverage Waiting Time: " + averageWaitingTime); System.out.println("\nTurnaround Time:"); displayTurnaroundTimes(processes); System.out.println("\nAverage Turnaround Time: " + averageTurnaroundTime); System.out.println("\nThroughput: " + throughput); System.out.println("\nNo. of Context Switching: " + contextSwitches); } public static void displayGanttChart(Process[] processes) { System.out.print("-------------------------\n| "); for (Process process : processes) { System.out.print("P" + process.id +" | "); } System.out.println("\n-------------------------"); } public static void displayWaitingTimes(Process[] processes) { for (Process process : processes) { System.out.println("P" + process.id +": " + (process.startTime - process.arrivalTime) +"ms"); } } public static void displayTurnaroundTimes(Process[] processes) { for (Process process : processes) { System.out.println("P" + process.id +": " + (process.endTime - process.arrivalTime) +"ms"); } }}
And this is the output I am getting which is wrong
Enter the number of processes: 3Enter the arrival time, burst time, and priority for each process:Process 1:Arrival Time: 0Burst Time: 5Priority: 3Process 2:Arrival Time: 2Burst Time: 6Priority: 1Process 3:Arrival Time: 3Burst Time: 3Priority: 2Gantt Chart:-------------------------| P1 | P2 | P3 | -------------------------Waiting Time:P1: 0msP2: 3msP3: 8msAverage Waiting Time: 3.6666666666666665
And this is the output I am trying to get
Enter the number of processes: 3Enter the arrival time, burst time, and priority for each process:Process 1:Arrival Time: 0Burst Time: 5Priority: 3Process 2:Arrival Time: 2Burst Time: 6Priority: 1Process 3:Arrival Time: 3Burst Time: 3Priority: 2Gantt Chart:-------------------------| P1 | P2 | P2 | P3 | P1 | -------------------------Waiting Time:P1: 9msP2: 0msP3: 5msAverage Waiting Time: 4.666666666666667Turnaround Time:P1: 14msP2: 6msP3: 8msAverage Turnaround Time: 9.333333333333334Throughput: 0.21428571428571427No. of Context Switching: 3
I am stuck here for like 4 days and can't figure out a way to make it work.
I have tried asking ChatGPT about it and searched it on Google and YouTube.
I even tried to approach my class teacher but sadly she is not helping me out.