Input file: I. The Assignment The Bashemia Parking Garage contains a single lane
ID: 3747481 • Letter: I
Question
Input file:
I. The Assignment The Bashemia Parking Garage contains a single lane that can hold up to ten cars. Arriving cars enter the garage at the rear and are parked in the empty space nearest to the front. Departing cars exit only from the front. If a customer needs to pick up a car that is not nearest to the exit, then all cars blocking its path are moved out temporarily the customer's car is driven out, and the other cars are restored in the order they were in originally. Whenever a car departs, all cars behind it in the garage are moved up one space. Write a Java program to operate the garage The program will read and process lines of input from a file until end-of-file. Each input line contains a license plate number and an operation (ARRIVE or DEPART), separated by apaces. Cars arrive and depart in the order specified by the input. Each input operation must be "echo printed" to an output file, along with an appropriate message showing the statug of the operation. When a car arrives, the message will include the license number and state whether the car is being parked or turned away because the garage is full. If the garage is full, the car leaves without ever having entered the garage When a car departs, the message will include the license number and the number of times the car was moved. The number of moves does not include the one where the car departs from the garage, or the number of times the car was moved ithin the garage It is only the number of times it was moved out of the garage temporarily to allow a car ehind it to depart If a DEPART operation calla for a car that is not in the garage, the message should so atate.
Explanation / Answer
I have answered this question before.Here is the completed code for this problem. Comments are included, go through it, learn how things work and let me know if you have any doubts. Thanks
// Car.java (modified)
public class Car
{
private String licenceNo;
private int countOfMove;
public String getLicenceNo() {
return licenceNo;
}
public void setLicenceNo(String licenceNo) {
this.licenceNo = licenceNo;
}
public int getCountOfMove() {
return countOfMove;
}
/**
* method to increment the number of moves car moved
*/
public void incrementCountOfMove() {
this.countOfMove++;
}
}
// Garage.java
public class Garage {
// defining attributes
private static final int SIZE = 10;
private Car cars[];
private int count;
/**
* default constructor
*/
public Garage() {
// initializing array
cars = new Car[SIZE];
// setting current number of cars to 0
count = 0;
}
/**
* method to perform the arrival operation of a car
*
* @param licenseNumber
* license number of the car
* @return the result of operation, in a String format
*/
public String arrival(String licenseNumber) {
if (count == cars.length) {
// garage is full
return "Garage is full, " + licenseNumber + " is not parked";
}
// creating a new car
Car newCar = new Car();
newCar.setLicenceNo(licenseNumber);
// adding to the end and updating count
cars[count] = newCar;
count++;
// return success message
return licenseNumber + " parked in the Garage";
}
/**
* method to perform the departure operation of a car
*
* @param licenseNumber
* license number of the car
* @return the result of operation, in a String format
*/
public String depart(String licenseNumber) {
// creating a car
Car c = new Car();
c.setLicenceNo(licenseNumber);
// finding the index of car in the array
int index = indexOf(c);
if (index == -1) {
// car not found
return licenseNumber + " is not found in the Garage";
}
/**
* simulating the movement of cars before the specified car out of the
* garage
*/
for (int i = 0; i < index; i++) {
// incrementing move count
cars[i].incrementCountOfMove();
}
// storing the car to be removed
Car removed = cars[index];
// shifting the remaining cars to occupy the vacant space in array
for (int i = index; i < count - 1; i++) {
cars[i] = cars[i + 1];
}
count--; // decreasing the count
// returning removed car stats
return removed.getLicenceNo() + " is departed from Garage,"
+ " number of moves made by this car: "
+ removed.getCountOfMove();
}
/**
* a private helper method to find the index of a car c in the cars array
*
* @param c
* - Car object
* @return index if found, -1 if not found
*/
private int indexOf(Car c) {
for (int i = 0; i < count; i++) {
if (cars[i].getLicenceNo().equals(c.getLicenceNo())) {
return i;
}
}
return -1;
}
}
// Test.java
import java.io.File;
import java.io.FileNotFoundException;
import java.io.PrintWriter;
import java.util.Scanner;
public class Test {
public static void main(String[] args) throws FileNotFoundException {
// make sure you have input.txt file in your directory
Scanner scanner = new Scanner(new File("input.txt"));
// creating a Garage
Garage garage = new Garage();
// creating a PrintWriter for writing to output file
PrintWriter writer = new PrintWriter(new File("output.txt"));
String result;
// looping through the file
while (scanner.hasNext()) {
// getting attributes
String license = scanner.next();
String operation = scanner.next();
// appending to output file
writer.println(license + " " + operation);
// performing operations and appending results to output file
if (operation.equalsIgnoreCase("DEPART")) {
result = garage.depart(license);
writer.println(result);
} else {
result = garage.arrival(license);
writer.println(result);
}
}
writer.close(); //important to close the writer to save the file
System.out.println("output has been saved to output.txt file");
}
}
/*output.txt*/
JAV001 ARRIVE
JAV001 parked in the Garage
JAV002 ARRIVE
JAV002 parked in the Garage
JAV003 ARRIVE
JAV003 parked in the Garage
JAV004 ARRIVE
JAV004 parked in the Garage
JAV005 ARRIVE
JAV005 parked in the Garage
JAV001 DEPART
JAV001 is departed from Garage, number of moves made by this car: 0
JAV004 DEPART
JAV004 is departed from Garage, number of moves made by this car: 0
JAV006 ARRIVE
JAV006 parked in the Garage
JAV007 ARRIVE
JAV007 parked in the Garage
JAV008 ARRIVE
JAV008 parked in the Garage
JAV009 ARRIVE
JAV009 parked in the Garage
JAV010 ARRIVE
JAV010 parked in the Garage
JAV011 ARRIVE
JAV011 parked in the Garage
JAV012 ARRIVE
JAV012 parked in the Garage
JAV013 ARRIVE
Garage is full, JAV013 is not parked
JAV014 ARRIVE
Garage is full, JAV014 is not parked
JAV006 DEPART
JAV006 is departed from Garage, number of moves made by this car: 0
JAV014 DEPART
JAV014 is not found in the Garage
JAV013 DEPART
JAV013 is not found in the Garage
JAV005 DEPART
JAV005 is departed from Garage, number of moves made by this car: 1
JAV015 ARRIVE
JAV015 parked in the Garage
JAV010 DEPART
JAV010 is departed from Garage, number of moves made by this car: 0
JAV002 DEPART
JAV002 is departed from Garage, number of moves made by this car: 4
JAV015 DEPART
JAV015 is departed from Garage, number of moves made by this car: 0
JAV014 DEPART
JAV014 is not found in the Garage
JAV009 DEPART
JAV009 is departed from Garage, number of moves made by this car: 2
JAV003 DEPART
JAV003 is departed from Garage, number of moves made by this car: 6
JAV008 DEPART
JAV008 is departed from Garage, number of moves made by this car: 3
JAV007 DEPART
JAV007 is departed from Garage, number of moves made by this car: 4
JAV012 DEPART
JAV012 is departed from Garage, number of moves made by this car: 1
JAV011 DEPART
JAV011 is departed from Garage, number of moves made by this car: 2