CSC 205 Programming II Lecture 22 Carwash Simulation
Recap: Queue A queue is an ordered, linear data structure New items are added at the rear end Items are removed from the front end It’s a “first-in, first-out” (FIFO) structure Queue operations Enqueue – add an item to the rear end Dequeue – remove the front item Peek – get the content of the top item
Carwash Simulation
The Problem A carwash station can wash one car at a time Time needed to wash a car is measured in seconds Cars may arrive at any given second A probability can be assumed Cars arrived when the washer is busy have to wait in line First-come, first-served The goal: find out the average waiting time for a given period of time (in seconds)
Program Specification Input Time needed to wash one car The probability that a new customer arrives at any given second The total length of time to be simulated Output Car arrival and leaving history Number of customers serviced Average time that a customer spent in line during the simulation
Design Objects relevant to the carwash problem A collection of cars: CarQueue Car Washer Other objects used in the simulation Random arrival time generator: BooleanSource Average time calculator: Averager The application driver class: CarWashApp
Detailed Design Key design concept Determine which properties of a real-world object are relevant to the problem at hand Car Arrival timestamp Sequence number CarQueue A linked list object is used as a queue Three operations enqueue, dequeue, isEmpty
Detailed Design – continued Washer Variables Time (in seconds) needed to wash a car Time left to finish washing the current car Operations Start washing set washTimeLeft to secondsForWash Reduce remaining time Decrement washTimeLeft if it is not zero Test if the washer is busy It’s busy if washTimeLeft is greater than zero
Detailed Design – continued BooleanSource Variable: probability Operation: query returns true only if Math.random() < probability Averager Variables A count and a sum Operations addNumber: update both count and sum howManyNumbers: return count average: return sum/count
Car Wash Application carWashSimulate Three parameters Time needed to wash a car Probability Total time Echo input parameters Validate parameters Processing car washing with a loop Output results
Car Wash Application Within the loop Check if a new car arrives Check whether we can start washing another car That is if washer is not busy, and The queue is not empty Reduce the remaining time during washing a car
Sample Simulation C:\courses\CSC205\labs\carwash>java CarWashApp2 Seconds to wash one car: 1000 Probability of customer arrival during a second: Total simulation seconds: 5000 Car Arrived Left Waited Customers served: 5 Average wait: sec