A2RefSolution/LinkedQueue.java A2RefSolution/LinkedQueue.java /** * @author Marcel Turcotte, Guy-Vincent Jourdan and Mehrdad Sabetzadeh * (University of Ottawa) * *...

please , help me with the assignment number 3. istill only have 7 hours.


A2RefSolution/LinkedQueue.java A2RefSolution/LinkedQueue.java /**  * @author Marcel Turcotte, Guy-Vincent Jourdan and Mehrdad Sabetzadeh  *         (University of Ottawa)  *   *         The implementation of this class is complete. You do *not* need to  *         change this class in this assignment.  *   */ public class LinkedQueue implements Queue {     private static class Elem {         private T value;         private Elem next;         private Elem(T value, Elem next) {             this.value = value;             this.next = next;         }     }     private Elem front;     private Elem rear;     public LinkedQueue() {         front = rear = null;     }     public boolean isEmpty() {         return front == null;     }     public void enqueue(D newElement) {         if (newElement == null) {             throw new NullPointerException("no null object in my queue !");             // could have been IllegalArgumentException but NPE seems             // to be the norm         }         Elem newElem;         newElem = new Elem(newElement, null);         if (isEmpty()) {             front = newElem;             rear = newElem;         } else {             rear.next = newElem;             rear = newElem;         }     }     public D dequeue() {         if (isEmpty()) {             throw new IllegalStateException("Dequeue method called on an empty queue");         }         D returnedValue;         returnedValue = front.value;         if (front.next == null) {             front = rear = null;         } else {             front = front.next;         }         return returnedValue;     }     public String toString() {         StringBuffer returnedValue = new StringBuffer("[");         if (!isEmpty()) {             Elem cursor = front;             returnedValue.append(cursor.value);             while (cursor.next != null) {                 cursor = cursor.next;                 returnedValue.append(", " + cursor.value);             }         }         returnedValue.append("]");         return returnedValue.toString();     } } __MACOSX/A2RefSolution/._LinkedQueue.java A2RefSolution/ParkingLot.java A2RefSolution/ParkingLot.java import java.io.File; import java.util.Scanner; /**  * @author Mehrdad Sabetzadeh, University of Ottawa  */ public class ParkingLot {     /**      * The delimiter that separates values      */     private static final String SEPARATOR = ",";     /**      * Instance variable for storing the number of rows in a parking lot      */     private int numRows;     /**      * Instance variable for storing the number of spaces per row in a parking lot      */     private int numSpotsPerRow;     /**      * Instance variable (two-dimensional array) for storing the lot design      */     private CarType[][] lotDesign;     /**      * Instance variable (two-dimensional array) for storing occupancy information      * for the spots in the lot      */     private Spot[][] occupancy;     /**      * Constructs a parking lot by loading a file      *       * @param strFilename is the name of the file      */     public ParkingLot(String strFilename) throws Exception {         if (strFilename == null) {             System.out.println("File name cannot be null.");             return;         }         calculateLotDimensions(strFilename);         lotDesign = new CarType[numRows][numSpotsPerRow];         occupancy = new Spot[numRows][numSpotsPerRow];         populateDesignFromFile(strFilename);     }     public int getNumRows() {         return numRows;     }     public int getNumSpotsPerRow() {         return numSpotsPerRow;     }     /**      * Parks a car (c) at a give location (i, j) within the parking lot.      *       * @param i         is the parking row index      * @param j         is the index of the spot within row i      * @param c         is the car to be parked      * @param timestamp is the (simulated) time when the car gets parked in the lot      */     public void park(int i, int j, Car c, int timestamp) {         if (!canParkAt(i, j, c)) {             System.out.println("Car " + c + " cannot be parked at (" + i + "," + j + ")");             return;         }         occupancy[i][j] = new Spot(c, timestamp);     }     /**      * Removes the car parked at a given location (i, j) in the parking lot      *       * @param i is the parking row index      * @param j is the index of the spot within row i      * @return the spot removed; the method returns null when either i or j are out      *         of range, or when there is no car parked at (i, j)      */     public Spot remove(int i, int j) {         if (i >= numRows || j >= numSpotsPerRow) {             System.out.println("Out of range index error.");             return null;         }         Spot s = occupancy[i][j];         occupancy[i][j] = null;         return s;     }     /**      * Returns the spot instance at a given position (i, j)      *       * @param i is the parking row index      * @param j is the index of the spot within row i      * @return the spot instance at a given position (i, j)      */     public Spot getSpotAt(int i, int j) {         if (i >= numRows || j >= numSpotsPerRow) {             System.out.println("Out of range index error.");             return null;         }         return occupancy[i][j];     }     /**      * Checks whether a car (which has a certain type) is allowed to park at      * location (i, j)      *       * @param i is the parking row index      * @param j is the index of the spot within row i      * @return true if car c can park at (i, j) and false otherwise      */     public boolean canParkAt(int i, int j, Car c) {         if (i >= numRows || j >= numSpotsPerRow) {             return false;         }         if (occupancy[i][j] != null) {             return false;         }         CarType carType = c.getType();         CarType spotType = lotDesign[i][j];         if (carType == CarType.ELECTRIC) {             return (spotType == CarType.ELECTRIC) || (spotType == CarType.SMALL) || (spotType == CarType.REGULAR)                     || (spotType == CarType.LARGE);         } else if (carType == CarType.SMALL) {             return (spotType == CarType.SMALL) || (spotType == CarType.REGULAR) || (spotType == CarType.LARGE);         } else if (carType == CarType.REGULAR) {             return (spotType == CarType.REGULAR) || (spotType == CarType.LARGE);         } else if (carType == CarType.LARGE) {             return (spotType == CarType.LARGE);         }         return false;     }     public boolean attemptParking(Car c, int timestamp) {         for (int i = 0; i < numrows; i++)             for (int j ="">< numspotsperrow; j++) {                 if (canparkat(i, j, c)) {=""                     park(i, j, c, timestamp);=""                     return true;=""                 }=""             }=""         return false;=""     }=""     /**=""      * @return the total capacity of the parking lot excluding spots that cannot be=""      *         used for parking (i.e., excluding spots that point to cartype.na)=""      */=""     public int gettotalcapacity() {=""         int count =" 0;"         for (int i ="">< numrows; i++)             for (int j ="">< numspotsperrow; j++)                 if (lotdesign[i][j] !=" CarType.NA)"                     count++;=""         return count;=""     }=""     /**=""      * @return the total occupancy of the parking lot=""      */=""     public int gettotaloccupancy() {=""         int count =" 0;"         for (int i ="">< numrows; i++)             for (int j ="">< numspotsperrow; j++)                 if (occupancy[i][j] !=" null)"                     count++;=""         return count;=""     }=""     private void calculatelotdimensions(string strfilename) throws exception {=""         scanner scanner =" new Scanner(new File(strFilename));"         while (scanner.hasnext()) {=""             string str =" scanner.nextLine().trim();"             if (str.isempty()) {=""                 // do nothing=""             } else {=""                 numrows++;=""                 string[] tokens =" str.split(SEPARATOR);"                 numspotsperrow =" Integer.max(tokens.length, numSpotsPerRow);"             }=""         }=""         scanner.close();=""     }=""     private void populatedesignfromfile(string strfilename) throws exception {=""         scanner scanner =" new Scanner(new File(strFilename));"         int rownumber =" 0;"         // while loop for reading the lot design=""         while (scanner.hasnext()) {=""             string str =" scanner.nextLine().trim();"             if (str.isempty()) {=""                 // do nothing=""             } else {=""                 string[] tokens =" str.split(",");"                 for (int i ="">< tokens.length; i++)                     lotdesign[rownumber][i] =" Util.getCarTypeByLabel(tokens[i].trim());"                 rownumber++;=""             }=""         }=""         scanner.close();=""     }=""     /**=""      * @return string containing the parking lot information=""      */=""     public string tostring() {=""         stringbuffer buffer =" new StringBuffer();"         buffer.append("="=== Lot Design ====").append(System.lineSeparator());"         for (int i ="">< lotdesign.length; i++) {             for (int j ="">< lotdesign[0].length; j++) {                 buffer.append((lotdesign[i][j] !=" null) ? Util.getLabelByCarType(lotDesign[i][j])"                         : util.getlabelbycartype(cartype.na));="">< numspotsperrow - 1) {                     buffer.append(", ");=""                 }=""             }=""             buffer.append(system.lineseparator());=""         }=""         buffer.append(system.lineseparator()).append("="=== Parking Occupancy ====").append(System.lineSeparator());"         for (int i ="">< occupancy.length; i++) {             for (int j ="">< occupancy[0].length; j++) {                 buffer.append(=""                         "(" + i + ", " + j + "): " + ((occupancy[i][j] !=" null) ? occupancy[i][j] : "Unoccupied"));"                 buffer.append(system.lineseparator());=""             }=""         }=""         return buffer.tostring();=""     }="" }="" __macosx/a2refsolution/._parkinglot.java="" a2refsolution/triangulardistribution.java="" a2refsolution/triangulardistribution.java="" **=""  * this class provides an implementation of a triangular probabilistic=""  * distribution. a simple mathematical explanation of this probability=""  * distribution is available on wikipedia at:=""  * https://en.wikipedia.org/wiki/triangular_distribution=""  * =""  * @author mehrdad sabetzadeh, university of ottawa=""  *=""  */="" public class triangulardistribution {=""     /**=""      * a, c, b are the three parameters on the x axis of=""      * https://en.wikipedia.org/wiki/file:triangular_distribution_pmf.png=""      */=""     int a, c, b;=""     /**=""      * constructor for triangulardistribution. you need to verify that the following=""      * condition holds: a ="">= 0 AND a <>< b      * =""      * @param a is the lower limit of the distribution=""      * @param c is the mode=""      * @param b is the upper limit of the distribution=""      */=""     public triangulardistribution(int a, int c, int b) {=""><>< b) {             this.a =" a;"             this.c =" c;"             this.b =" b;"         } else {=""             system.out.println(=""                     "triangular distribution: the parameters of the consturctor are invalid. assigning default parameters (a =" 0, c = 50, b = 100)");"             // default to a =" 0, c = 50, b = 100;"             this.a =" a;"             this.c =" c;"             this.b =" b;"         }=""     }=""     /**=""      * @param x is a point on the x axis=""      * @return the probability density at point x=""      */=""     public rational pdf(int x) {="">< a)             return rational.zero;=""         if (x ="">= a && x <= c)             return new rational(2 * (x - a), (b - a) * (c - a));=""         if (x =""> c && x <= b)             return new rational(2 * (b - x), (b - a) * (b - c));=""         return rational.zero;=""     }=""     /**=""      * =""      * this method provides two examples to help you test your implementation of=""      * triangular distribution. the output obtained from running this main method in=""      * the reference solution is provided to you alongside the starter code for a2.=""      * =""      * @param args command lines parameters (not used in the body of the method)=""      */=""     public static void main(string args[]) {=""         system.out.println("="========== TriangularDistribution(0, 5, 10) =============");"         triangulardistribution dist0 =" new TriangularDistribution(0, 5, 10);"         rational sum0 =" new Rational(0, 1);"         for (int i =""><= 10; i++) {             rational p =" dist0.pdf(i);"             sum0 =" sum0.plus(p);"             system.out.println("pdf(" + i + ") =" " + dist0.pdf(i));"         }=""         system.out.println();=""         system.out.println("integral (sum) =" " + sum0);"         system.out.println();=""         =""         system.out.println("="========== TriangularDistribution(0, 50, 100) =============");"         triangulardistribution dist1 =" new TriangularDistribution(0, 50, 100);"         rational sum1 =" new Rational(0, 1);"         for (int i =""><= 100; i++) {             rational p =" dist1.pdf(i);"             sum1 =" sum1.plus(p);"             system.out.println("pdf(" + i + ") =" " + dist1.pdf(i));"         }=""         system.out.println();=""         =""         system.out.println("integral (sum) =" " + sum1);"         system.out.println();=""         system.out.println("="========== TriangularDistribution(0, 10, 50) =============");"         triangulardistribution dist2 =" new TriangularDistribution(0, 10, 50);"         rational sum2 =" new Rational(0, 1);"         for (int i =""><= 50; i++) {             rational p =" dist2.pdf(i);"             sum2 =" sum2.plus(p);"             system.out.println("pdf(" + i + ") =" " + dist2.pdf(i));"         }=""         system.out.println();=""         system.out.println("integral (sum) =" " + sum2);"     }="" }="" __macosx/a2refsolution/._triangulardistribution.java="" a2refsolution/.ds_store="" __macosx/a2refsolution/._.ds_store="" a2refsolution/util.java="" a2refsolution/util.java="" **=""  * this is a utility class to simplify the implementation of a1. you are *not*=""  * supposed to change the util class. you are nevertheless encouraged to study=""  * the methods in this class for practice.=""  * =""  * @author mehrdad sabetzadeh, university of ottawa=""  */="" public class util {=""     public static cartype getcartypebylabel(string label) {=""         if (label.equals("e"))=""             return cartype.electric;=""         else if (label.equals("s"))=""             return cartype.small;=""         else if (label.equals("r"))=""             return cartype.regular;=""         else if (label.equals("l"))=""             return cartype.large;=""         else=""             return cartype.na;=""     }=""     public static string getlabelbycartype(cartype type) {=""         if (type ="= CarType.ELECTRIC)"             return "e";=""         else if (type ="= CarType.SMALL)"             return "s";=""         else if (type ="= CarType.REGULAR)"             return "r";=""         else if (type ="= CarType.LARGE)"             return "l";=""         else=""             return "n";=""     }="" }="" __macosx/a2refsolution/._util.java="" a2refsolution/randomgenerator.java="" a2refsolution/randomgenerator.java="" import java.util.random;="" **=""  * @author mehrdad sabetzadeh, university of ottawa=""  * =""  *         the implementation of this class is complete. you do *not* need to=""  *         change this class in this assignment.=""  * =""  */="" public class randomgenerator {=""     /**=""      * array of admissible characters in randomly generated strings (for car plates)=""      */=""     private static final char[] alphanum =" { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O',"             'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' };=""     /**=""      * instance of random class; all random quantities in this assignment will be=""      * generated through this single instance of random=""      */=""     private static random rand =" new Random();"     /**=""      * @param probability is the probability of the event of interest occurring=""      *                    within a single simulated time unit. the simulated time=""      *                    unit in this assignment is a second. for example, if this=""      *                    method is called with probability being 1/100, that means=""      *                    that the event of interest has a 1% probability of=""      *                    occurring in that second. this probability would translate=""      *                    to a (probabilistic) arrival rate of 3600 * 1% =" 36 cars"      *                    per hour.=""      * @return true if the event of interest occurred within the current single time=""      *         unit, false otherwise=""      */=""     public static boolean eventoccurred(rational probability) {=""><>< probability.numerator()) {             return false;=""         }=""         int number =" rand.nextInt(probability.denominator());">< probability.numerator())             return true;=""         return false;=""     }=""     /**=""      * @param length is the length of the random string to generate=""      * @return a random string with the specified length=""      */=""     public static string generaterandomstring(int length) {=""         stringbuffer buffer =" new StringBuffer();"         for (int i ="">< length; i++) {             buffer.append(alphanum[rand.nextint(alphanum.length)]);=""         }=""         return buffer.tostring();=""     }=""     /**=""      * @return an instance of car with the car type decided probabilistically,=""      *         according to predefined proportions=""      */=""     public static car generaterandomcar() {=""         // hard-coded:=""         // electric (prob: 5%),=""         // small (prob: 20%),=""         // large (prob: 10%),=""         // regular (default).=""         cartype type;=""         int number =" rand.nextInt(100);">< 5)             type =" CarType.ELECTRIC;"         else if (number ="">= 5 && number < 25)             type =" CarType.SMALL;"         else if (number ="">= 25 && number < 35)             type =" CarType.LARGE;"         else=""             type =" CarType.REGULAR;"         return new car(type, generaterandomstring(3));=""     }="" }="" __macosx/a2refsolution/._randomgenerator.java="" a2refsolution/cartype.java="" a2refsolution/cartype.java="" **=""  * @author mehrdad sabetzadeh, university of ottawa=""  * =""  *         the declaration of this enumeration is complete. you do *not* need to=""  *         change this enumeration in this assignment.=""  */="" public enum cartype {=""     electric, small, regular, large, na;="" }="" __macosx/a2refsolution/._cartype.java="" a2refsolution/queue.java="" a2refsolution/queue.java="" **=""  * @author marcel turcotte, guy-vincent jourdan and mehrdad sabetzadeh=""  *         (university of ottawa)=""  * =""  *         the declaration of this interface is complete. you do *not* need to=""  *         change this interface in this assignment.=""  * =""  */=""> {     boolean isEmpty();     void enqueue(E newElement);     E dequeue(); } __MACOSX/A2RefSolution/._Queue.java A2RefSolution/parking.inf S, S, S, S, N R, R, L, L, E R, R, L, L, E S, S, S, S, N R, R, L, L, E R, R, L, L, E R, R, L, L, E R, R, L, L, E R, R, L, L, E R, R, L, L, E R, R, L, L, E R, R, L, L, E __MACOSX/A2RefSolution/._parking.inf A2RefSolution/StudentInfo.java A2RefSolution/StudentInfo.java /** * Contains a methodvoid display() that all themain
* methods call to show the student information. Fill the box with your personal * information. * * @author Marcel Turcotte ([email protected]) */ public class StudentInfo {     /**     * Displays the student information: student name, id, section, etc for each     * member of the team.     */     public static void display() {         System.out.println("************************************************************");         System.out.println("*                                                          *");         System.out.println("*                                                          *");         System.out.println("*                                                          *");         System.out.println("*                                                          *");         System.out.println("************************************************************");         System.out.println();     } } __MACOSX/A2RefSolution/._StudentInfo.java A2RefSolution/Simulator.java A2RefSolution/Simulator.java /**  * @author Mehrdad Sabetzadeh, University of Ottawa  *  */ public class Simulator {     /**      * Maximum duration a car can be parked in the lot      */     public static final int MAX_PARKING_DURATION = 8 * 3600;     /**      * Total duration of the simulation in (simulated) seconds      */     public static final int SIMULATION_DURATION = 24 * 3600;     /**      * The probability distribution for a car leaving the lot based on the duration      * that the car has been parked in the lot      */     public static final TriangularDistribution departurePDF = new TriangularDistribution(0, MAX_PARKING_DURATION / 2,             MAX_PARKING_DURATION);     /**      * The probability that a car would arrive at any given (simulated) second      */     private Rational probabilityOfArrivalPerSec;     /**      * The simulation clock. Initially the clock should be set to zero; the clock      * should then be incremented by one unit after each (simulated) second      */     private int clock;     /**      * Total number of steps (simulated seconds) that the simulation should run for.      * This value is fixed at the start of the simulation. The simulation loop      * should be executed for as long as clock < steps. when clock == steps, the      * simulation is finished.=""      */=""     private int steps;=""     /**=""      * instance of the parking lot being simulated.=""      */=""     private parkinglot lot;=""     /**=""      * queue for the cars wanting to enter the parking lot=""      */=""> incomingQueue;     /**      * Queue for the cars wanting to leave the parking lot      */     private Queue outgoingQueue;     /**      * @param lot   is the parking lot to be simulated      * @param steps is the total number of steps for simulation      */     public Simulator(ParkingLot lot, int perHourArrivalRate, int steps) {         this.lot = lot;         this.probabilityOfArrivalPerSec = new Rational(perHourArrivalRate, 3600);         this.steps = steps;         this.clock = 0;         incomingQueue = new LinkedQueue();         outgoingQueue = new LinkedQueue();     }     private void processArrival() {         boolean shouldAddNewCar = RandomGenerator.eventOccurred(probabilityOfArrivalPerSec);         if (shouldAddNewCar)             incomingQueue.enqueue(new Spot(RandomGenerator.generateRandomCar(), clock));     }     private void processDeparture() {         for (int i = 0; i < lot.getnumrows(); i++)             for (int j ="">< lot.getnumspotsperrow(); j++) {                 spot spot =" lot.getSpotAt(i, j);"                 if (spot !=" null) {"                     int duration =" clock - spot.getTimestamp();"                     boolean willleave =" false;"                     if (duration =""> 8 * 3600) {                         willLeave = true;                     } else {                         willLeave = RandomGenerator.eventOccurred(departurePDF.pdf(duration));                     }                     if (willLeave) {                         // System.out.println("DEPARTURE AFTER " + duration/3600f + " hours.");                         Spot toExit = lot.remove(i, j);                         toExit.setTimestamp(clock);                         outgoingQueue.enqueue(spot);                     }                 }             }     }     /**      * Simulate the parking lot for the number of steps specified by the steps      * instance variable      */     public void simulate() {         Spot incomingToProcess = null;         while (clock < steps) {             processarrival();=""             processdeparture();=""             if (incomingtoprocess !=" null) {"                 boolean isprocessed =" lot.attemptParking(incomingToProcess.getCar(), clock);"                 if (isprocessed) {=""                     system.out.println(incomingtoprocess.getcar() + " entered at timestep " + clock=""                             + "; occupancy is at " + lot.gettotaloccupancy());=""                     incomingtoprocess =" null;"                 }=""             } else if (!incomingqueue.isempty()) {=""                 incomingtoprocess =" incomingQueue.dequeue();"             }=""             if (!outgoingqueue.isempty()) {=""                 spot leaving =" outgoingQueue.dequeue();"                 system.out.println(leaving.getcar() + " exited at timestep " + clock + "; occupancy is at "=""                         + lot.gettotaloccupancy());=""             }=""             clock++;=""         }=""     }=""     /**="">main of the application. The method first reads from the standard      * input the name of the parking-lot design. Next, it simulates the parking lot      * for a number of steps (this number is specified by the steps parameter). At      * the end, the method prints to the standard output information about the      * instance of the ParkingLot just created.      *       * @param args command lines parameters (not used in the body of the method)      * @throws Exception      */     public static void main(String args[]) throws Exception {         StudentInfo.display();                  if (args.length < 2) {> ");             System.out.println("Example: java Simulator parking.inf 11");             return;         }         if (!args[1].matches("\\d+")) {             System.out.println("The hourly rate of arrival should be a positive integer!");             return;         }         ParkingLot lot = new ParkingLot(args[0]);         System.out.println("Total number of parkable spots (capacity): " + lot.getTotalCapacity());         Simulator sim = new Simulator(lot, Integer.parseInt(args[1]), SIMULATION_DURATION);         long start, end;         System.out.println("=== SIMULATION START ===");         start = System.currentTimeMillis();         sim.simulate();         end = System.currentTimeMillis();         System.out.println("=== SIMULATION END ===");         System.out.println();         System.out.println("Simulation took " + (end - start) + "ms.");         System.out.println();         int count = 0;         while (!sim.incomingQueue.isEmpty()) {             sim.incomingQueue.dequeue();             count++;         }         System.out.println("Length of car queue at the front at the end of simulation: " + count);     } } __MACOSX/A2RefSolution/._Simulator.java A2RefSolution/parking3.inf S, S, S, S, N R, R, L, L, E R, R, E, L, E S, S, S, S, N R, R, E, L, E R, R, E, L, E R, R, E, L, E R, R, E, L, E R, R, E, L, E R, R, E, L, E R, R, E, L, E R, R, E, L, E __MACOSX/A2RefSolution/._parking3.inf A2RefSolution/Rational.java A2RefSolution/Rational.java // This class is borrowed from Computer Science: An Interdisciplinary Approach by Robert Sedgewick and Kevin Wayne  // Source code: https://introcs.cs.princeton.edu/java/92symbolic/Rational.java.html /**     The implementation of this class is complete. You do *not* need to change      this class in this assignment. */ /******************************************************************************  * Immutable ADT for Rational numbers.  *   * Invariants ----------- - gcd(num, den) = 1, i.e, the rational number is in  * reduced form - den >= 1, the denominator is always a positive integer - 0/1  * is the unique representation of 0  ******************************************************************************/ public class Rational {     public static Rational zero = new Rational(0, 1);     private int num; // the numerator     private int den; // the denominator     // create and initialize a new Rational object     public Rational(int numerator, int denominator) {         if (denominator == 0) {             throw new ArithmeticException("denominator is zero");         }         // reduce fraction         int g = gcd(numerator, denominator);         num = numerator / g;         den = denominator / g;         // needed only for negative numbers         if (den < 0) {             den =" -den;"             num =" -num;"         }=""     }=""     // return the numerator and denominator of (this)=""     public int numerator() {=""         return num;=""     }=""     public int denominator() {=""         return den;=""     }=""     // return double precision representation of (this)=""     public double todouble() {=""         return (double) num / den;=""     }=""     // return string representation of (this)=""     public string tostring() {=""         if (den ="= 1)"             return num + "";=""         else=""             return num + "/" + den;=""     }="">< b, a = b, or a > b     public int compareTo(Rational b) {         Rational a = this;         int lhs = a.num * b.den;         int rhs = a.den * b.num;         if (lhs < rhs)             return -1;=""         if (lhs =""> rhs)             return +1;         return 0;     }     // is this Rational object equal to y?     public boolean equals(Object y) {         if (y == null)             return false;         if (y.getClass() != this.getClass())             return false;         Rational b = (Rational) y;         return compareTo(b) == 0;     }     // hashCode consistent with equals() and compareTo()     // (better to hash the numerator and denominator and combine)     public int hashCode() {         return this.toString().hashCode();     }     // create and return a new rational (r.num + s.num) / (r.den + s.den)     public static Rational mediant(Rational r, Rational s) {         return new Rational(r.num + s.num, r.den + s.den);     }     // return gcd(|m|, |n|)     private static int gcd(int m, int n) {         if (m < 0)             m =" -m;">< 0)             n =" -n;"         if (0 ="= n)"             return m;=""         else=""             return gcd(n, m % n);=""     }=""     // return lcm(|m|, |n|)=""     private static int lcm(int m, int n) {="">< 0)             m =" -m;">< 0)             n =" -n;"         return m * (n / gcd(m, n)); // parentheses important to avoid overflow=""     }=""     // return a * b, staving off overflow as much as possible by cross-cancellation=""     public rational times(rational b) {=""         rational a =" this;"         // reduce p1/q2 and p2/q1, then multiply, where a =" p1/q1 and b = p2/q2"         rational c =" new Rational(a.num, b.den);"         rational d =" new Rational(b.num, a.den);"         return new rational(c.num * d.num, c.den * d.den);=""     }=""     // return a + b, staving off overflow=""     public rational plus(rational b) {=""         rational a =" this;"         // special cases=""         if (a.compareto(zero) ="= 0)"             return b;=""         if (b.compareto(zero) ="= 0)"             return a;=""         // find gcd of numerators and denominators=""         int f =" gcd(a.num, b.num);"         int g =" gcd(a.den, b.den);"         // add cross-product terms for numerator=""         rational s =" new Rational((a.num / f) * (b.den / g) + (b.num / f) * (a.den / g), lcm(a.den, b.den));"         // multiply back in=""         s.num *=" f;"         return s;=""     }=""     // return -a=""     public rational negate() {=""         return new rational(-num, den);=""     }=""     // return |a|=""     public rational abs() {=""         if (num ="">= 0)             return this;         else             return negate();     }     // return a - b     public Rational minus(Rational b) {         Rational a = this;         return a.plus(b.negate());     }     public Rational reciprocal() {         return new Rational(den, num);     }     // return a / b     public Rational divides(Rational b) {         Rational a = this;         return a.times(b.reciprocal());     } } __MACOSX/A2RefSolution/._Rational.java A2RefSolution/parking2.inf L, L, L, L, N L, L, L, L, L L, L, L, L, L L, L, L, L, N L, L, L, L, L L, L, L, L, L L, L, L, L, L L, L, L, L, L L, L, L, L, L L, L, L, L, L L, L, L, L, L L, L, L, L, L __MACOSX/A2RefSolution/._parking2.inf A2RefSolution/Car.java A2RefSolution/Car.java /**  * @author Mehrdad Sabetzadeh, University of Ottawa  *   *         The implementation of this class is complete. You do *not* need to  *         change this class in this assignment.  *   */ public class Car {     /**      * Instance variable for storing the type of the car      */     private CarType type;     /**      * Instance variable for storing the car plate number      */     private String plateNum;     /**      * @return the type of this car      */     public CarType getType() {         return type;     }     /**      * Sets the type of the car      *       * @param type is the car type      */     public void setType(CarType type) {         this.type = type;     }     /**      * @return the plate number      */     public String getPlateNum() {         return plateNum;     }     /**      * Sets the car plate number      *       * @param plateNum is the car plate number      */     public void setPlateNum(String plateNum) {         this.plateNum = plateNum;     }     /**      * Constructor for Car      *       * @param type     is the type of the car      * @param plateNum is the car plate number      */     public Car(CarType type, String plateNum) {         this.type = type;         this.plateNum = plateNum;     }     /**      * Returns a string representation of the car      */     public String toString() {         return Util.getLabelByCarType(type) + '(' + plateNum + ')';     } } __MACOSX/A2RefSolution/._Car.java A2RefSolution/Spot.java A2RefSolution/Spot.java /**  * @author Mehrdad Sabetzadeh, University of Ottawa  *  */ public class Spot {     private Car car;     private int timestamp;     public Car getCar() {         return car;     }     public void setCar(Car car) {         this.car = car;     }     public int getTimestamp() {         return timestamp;     }     public void setTimestamp(int timestamp) {         this.timestamp = timestamp;     }     public Spot(Car car, int timestamp) {         this.car = car;         this.timestamp = timestamp;     }     /**      * Returns a string representation of the spot      */     public String toString() {         return car + ", timestamp: " + timestamp;     } } __MACOSX/A2RefSolution/._Spot.java
Mar 22, 2022
SOLUTION.PDF

Get Answer To This Question

Related Questions & Answers

More Questions »

Submit New Assignment

Copy and Paste Your Assignment Here