2021-08-28 16:16:58 +10:00

200 lines
6.3 KiB
Java

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<Process> processList = new LinkedList<Process>();
LinkedList<Integer> 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.");
}
}