I have an airplane seating program but I don't know how to get it to print the number of seats still available and how to get it to quit when I enter q. Any help would be greatly appreciated. Yours truly, Quang Pham
I'm not certain where to place the count++ to number the filled seats, and how to set the sentinel q so the program quits. The printout of the seat arrangement is good and the X goes where it should.
import java.util.Scanner ;
/**
* The AirplaneSeating program asks the user for the seat they would like to reserve.
* A layout of the plane is printed and an X is placed in the reserved seat. The
* program finds if the seat is available and if the entry is valid. A sentinel of q
* ends the program.
*
* @author Quang Pham
* @version Module8, Lab 2, 4/1/20
*
* Algorithm:
*
* 1. Greet user and ask which seat they would like to reserve.
* 2. Print a layout of the plane and the seats available.
* 3. Put an X in the position where the user would like to reserve.
* 4. Loop and ask if they'd like to reserve another seat.
* 5. Make certain seat is available and the entry is valid, if sentinel -1
* is entered, exit program.
*
* Problem Description:
*
* Write a program to assign passenger's seats in a small airplane. Assume the
* plane has its seats numbered as follows:
*
* Row
* 1 A B C D
* 2 A B C D
* 3 A B C D
* 4 A B C D
* 5 A B C D
* 6 A B C D
* 7 A B C D
*
* You should verify that the user enters rows between 1 and 7 only, and
* columns A, B, C, or D only. If the user enters an entry that is invalid,
* print an error message telling them what's wrong, then prompt for the next
* entry. Model the seats in the plane using a multi-dimensional array with
* seven rows and four columns. Use a loop in your program which continues to
* prompt for a seat to reserve until either the user specifies a sentinel to
* stop the program, or when all seats are reserved.
* After each entry from the user, the program should display the seat
* reservation pattern, with an 'X' marking the seats already assigned. For
* example, after seats 1A, 2B, and 4C are reserved, the display might show
* the following:
*
* Row
* 1 X B C D
* 2 A X C D
* 3 A B C D
* 4 A B X D
* 5 A B C D
* 6 A B C D
* 7 A B C D
*
* There are 25 seats available. This continues until either all seats are
* filled or the user enters a sentinel indicating that he/she is done entering
* reservations. If the user tries to reserve a seat which is already taken, the
* program should say that that seat is occupied and ask for another choice.
* Submit program files for all classes, as well as a print screen or screen
* snip showing what your screen looks like after 4 or 5 seats have been assigned.
* Be sure to demonstrate what happens when the user tries to reserve a seat that
* is already taken or specifies an invalid seat (for example, 9A or 5E).
*/
public class AirplaneSeating
{
int count = 0 ;
public static void main(String[] args)
{
// two- dimensional array with 7 rows and 4 columns
char[][] seats = new char [7][4] ;
for (int i = 0; i < 7; i++)
{
seats[i][0] = 'A' ;
seats[i][1] = 'B' ;
seats[i][2] = 'C' ;
seats[i][3] = 'D' ;
}
String seatNumber = " " ;
int count = 0 ;
String q = " " ;
int numberOfSeatsAvailable = 0 ;
int filled = 0 ;
System.out.println("Welcome to the Airplane Seating Reservation System.") ;
System.out.println("Please enter the seat (e.g.- 1A) you wish to reserve.") ;
System.out.println("Enter q to exit.") ;
Scanner keyboard = new Scanner(System.in) ;
seatNumber = keyboard.nextLine() ;
count++ ;
if (seatNumber.equals("q"))
{
System.out.println("Program ended.") ;
System.exit(0) ;
}
else
{
//print seating pattern and put an X in the seatNumber location
while((filled < 28) && (seatNumber.length() > 0))
{
int row = seatNumber.charAt(0) - '1' ;
int col = seatNumber.charAt(1) - 'A' ;
count ++ ;
if (row < 0 || row > 7 || col < 0 || col > 4)
{
System.out.println("Input error. Enter seat to assign (e.g., '1A')," +
"or q to quit.");
seatNumber = keyboard.nextLine() ;
count++ ;
}
else
{
if (seats[row][col] != 'X')
{
seats[row][col] = 'X' ;
filled++;
System.out.println(" ") ;
printSeats(seats);
}
if (filled < 28)
{
System.out.println("Enter seat to assign (e.g., '1A')," +
"or q to quit.");
seatNumber = keyboard.nextLine();
count++ ;
}
}
}
}
}
private static void printSeats(char[][] seats)
{
int count = 0;
System.out.println("Row") ;
for (int i = 0; i < seats.length; i++)
{
System.out.println((i + 1) + " " +
seats[i][0] + " " + seats[i][1] + " " + seats[i][2] + " " + seats[i][3]) ;
}
count++ ;
int numberOfSeatsAvailable = 0 ;
numberOfSeatsAvailable = (28 - count) ;
System.out.println("There are " + numberOfSeatsAvailable + " seats available.") ;
} //end main
} //end class
I place the line int numberOfSeatsAvailable = 28 ; in the variable declaration, and numberOfSeatsAvailable-- ;
System.out.println("There are " + numberOfSeatsAvailable + " seats available.") ; System.out.println(" ") ; in after where an X is placed in the seat location loop. I'm still working on the sentinel q for quit part.
You have declared so many unnecessary variables e.g. you do not need
count
at all since you already have afilled
variable doing the same thing. Also, makefilled
as a globalstatic
variable so that it can be accessed inmain
and all other methods. Alternatively, you can pass it as an argument to the methods.The corrected program is as follows:
A sample run:
Feel free to comment in case of any issue/doubt.
Thank you Arvind Avinash! My corrected program is given: