import java.util.*; import java.io.*; public class A1 { //Address of File name relative to code. Replace with request for filename? String fileName = "datafiles/datafile1.txt"; LinkedList processList = new LinkedList(); LinkedList randomNum = new LinkedList<>(); //Initialise Dispatcher time variable int disp; /** * Main. Runs the program */ public static void main(String[] args){ A1 system = new A1(); system.run(); } /** * Run. Most of the program starts from here. */ public void run() { readFile(fileName); //Read the file //printFile(); Algorithm fcfs = new Algorithm(disp, processList, randomNum, "FCFS"); fcfs.runDispatch(); printResults(); System.out.println(fcfs.averageTurnTime()); reset(); System.out.println(); Algorithm srt = new Algorithm(disp, processList, randomNum,"SRT"); srt.runDispatch(); printResults(); reset(); System.out.println(); Algorithm ltr = new Algorithm(disp, processList, randomNum,"LTR"); ltr.runDispatch(); printResults(); reset(); } public void reset() { for(int i = 0; i < processList.size(); i++) { processList.get(i).reset(); } } public void printResults() { System.out.println("\nProcess \tTurnaround Time \tWaiting Time"); for (int i = 0; i < processList.size(); i++) { System.out.print(processList.get(i).getId()+"\t\t"); System.out.print(processList.get(i).getTurnTime()+"\t\t\t"); System.out.print(processList.get(i).getWaitTime()+"\n"); } } /** * readFile. Reads the file given, creating processes as needed to save details. * @param fileNameInput address of the file to be read in. */ public void readFile(String fileNameInput) { Scanner fileReader; //Scanner to read the file. File dataSet = new File(fileNameInput); //Try and open file. If it works, procede. try { fileReader = new Scanner(dataSet); //Progress through each line in the text file while(fileReader.hasNextLine()){ String line = fileReader.nextLine(); //If the line has "EOF" written, stop reading lines. if(line.equals("EOF")) { break; } else if(line.startsWith("DISP")) { disp =Integer.parseInt(line.substring(6)); } //If the Line starts with "ID:", create a new process else if(line.startsWith("ID:")) { //Create new proccess Process temp = new Process(); temp.setId(line.substring(4)); //Set the id of the proccess to whatever remains of the line after the "ID: " //As we've read in the ID, we shall assume the following lines (until "END") are all part of the process definition. while(fileReader.hasNextLine()) { line = fileReader.nextLine(); if(line.equals("END")) { break; } else if(line.startsWith("Arrive:")) { temp.setArrive(Integer.parseInt(line.substring(8))); } else if(line.startsWith("ExecSize:")) { temp.setSize(Integer.parseInt(line.substring(10))); } else if(line.startsWith("Tickets:")) { temp.setTickets(Integer.parseInt(line.substring(9))); } else { //Delete process? } } processList.add(temp); } //If we read the line "BEGINRANDOM", we've started the random numbers section. Until the "ENDRANDOM" line, //we'll just keep reading in each number (and it is assumed each line is a single number) and adding it //to the random number array. else if(line.equals("BEGINRANDOM")) { while(fileReader.hasNextLine()) { line = fileReader.nextLine(); if(line.equals("ENDRANDOM")) { break; } else { randomNum.add(Integer.parseInt(line)); } } } } fileReader.close(); } //If the file isn't found, throw a hissy fit. catch (FileNotFoundException e) { System.out.println("File not found."); //e.printStackTrace(); //Optional, shows more data. } } public void printFile() { //Test Print System.out.println("DISP: " + disp + "\n"); System.out.println("Begin Process List:"); for (int i = 0; i < processList.size() ; i++) { System.out.println("ID: " + processList.get(i).getId()); System.out.println("Arrive: " + processList.get(i).getArrive()); System.out.println("ExecSize: " + processList.get(i).getExecSize()); System.out.println("Tickets: " + processList.get(i).getTickets()); System.out.println(); } System.out.println("End Process List.\n"); System.out.println("Begin Random:"); for (int i = 0; i < randomNum.size(); i++) { System.out.println(randomNum.get(i)); } System.out.println("End Random."); } }