Download - CSC 205 Programming II
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
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
carWashSimulateThree parameters
• Time needed to wash a car• Probability• Total time
Echo input parameters Validate parametersProcessing car washing with a loopOutput 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 CarWashApp2Seconds to wash one car: 1000Probability of customer arrival during a second: 0.0010Total simulation seconds: 5000Car Arrived Left Waited1 470 470 02 1412 1470 583 1580 2470 8904 2900 3470 5705 3559 4470 911Customers served: 5Average wait: 485.8 sec