mirror of
https://github.com/zach-sb/COMP2240-Assignment1.git
synced 2024-07-02 12:04:00 +10:00
200 lines
6.3 KiB
Java
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.");
|
|
}
|
|
|
|
} |