'Airplane seating program (2 dimensional array)

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


Solution 1:[1]

You have declared so many unnecessary variables e.g. you do not need count at all since you already have a filled variable doing the same thing. Also, make filled as a global static variable so that it can be accessed in main and all other methods. Alternatively, you can pass it as an argument to the methods.

The corrected program is as follows:

import java.util.Scanner;

public class AirplaneSeating {

    static int filled = 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 = " ";
        String q = " ";
        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();
        if (seatNumber.equals("q")) {
            System.out.println("Program ended.");
            System.exit(0);
        }
        // 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';
            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();
                if (seatNumber.equals("q")) {
                    System.out.println("Program ended.");
                    System.exit(0);
                }
            } 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();
                    if (seatNumber.equals("q")) {
                        System.out.println("Program ended.");
                        System.exit(0);
                    }
                }
            }
        }
    }

    private static void printSeats(char[][] seats) {
        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]);

        }
        int numberOfSeatsAvailable = (28 - filled);
        System.out.println("There are " + numberOfSeatsAvailable + " seats available.");
    } // end main
} // end class

A sample run:

Welcome to the Airplane Seating Reservation System.
Please enter the seat (e.g.- 1A) you wish to reserve.
Enter q to exit.
3B

Row
1  A B  C D
2  A B  C D
3  A X  C D
4  A B  C D
5  A B  C D
6  A B  C D
7  A B  C D
There are 27 seats available.
Enter seat to assign (e.g., '1A'),or q to quit.
6A

Row
1  A B  C D
2  A B  C D
3  A X  C D
4  A B  C D
5  A B  C D
6  X B  C D
7  A B  C D
There are 26 seats available.
Enter seat to assign (e.g., '1A'),or q to quit.
4C

Row
1  A B  C D
2  A B  C D
3  A X  C D
4  A B  X D
5  A B  C D
6  X B  C D
7  A B  C D
There are 25 seats available.
Enter seat to assign (e.g., '1A'),or q to quit.
q
Program ended.

Feel free to comment in case of any issue/doubt.

Solution 2:[2]

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.

Solution 3:[3]

Thank you Arvind Avinash! My corrected program is given:

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 q
 *       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
{

    static int filled = 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 = " " ; 
        String q = " " ;
        int numberOfSeatsAvailable = 28 ;
        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.") ;
        printSeats(seats) ;
        Scanner keyboard = new Scanner(System.in) ;
        seatNumber = keyboard.nextLine() ;
        if (seatNumber.equals("q"))
                {
                    System.out.println("Program ended.") ;
                    System.exit(0) ;
                } 
        while((filled < 28) && (seatNumber.length() > 0))
        {
            int row = seatNumber.charAt(0) - '1' ;
            int col = seatNumber.charAt(1) - 'A';
            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() ;
                if (seatNumber.equals("q"))
                {
                    System.out.println("Program ended.") ;
                    System.exit(0) ;
                } 
            }
            else
            {
                //put an X in the assigned seat and print seating arrangement
                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();
                    if (seatNumber.equals("q"))
                    {
                        System.out.println("Program ended.") ;
                        System.exit(0) ;
                    } 
                }
            }
        }       
        System.out.println("Final seat assignments: "); 
        printSeats(seats); 
    }

    private static void printSeats(char[][] seats)
    {
        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]) ;
        }
        int numberOfSeatsAvailable = (28 - filled);
        System.out.println("There are " + numberOfSeatsAvailable + " seats available.");
        System.out.println(" ");
    }  //end main
}  //end class

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1
Solution 2 Quang
Solution 3 Quang