Программа посадки самолета (двухмерный массив) - PullRequest
0 голосов
/ 28 марта 2020

У меня есть программа посадочных мест в самолете, но я не знаю, как заставить ее распечатать количество доступных мест и как заставить ее выйти, когда я ввожу q. Любая помощь будет принята с благодарностью. С уважением, Куанг Фам

Я не уверен, где разместить счет ++ для нумерации заполненных мест, и как установить дозорный q, чтобы программа закрывалась. Распечатка расположения сидений хорошая, и Х идет туда, куда должен.

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

Ответы [ 3 ]

1 голос
/ 28 марта 2020

Вы объявили так много ненужных переменных, например, вам вообще не нужен count, поскольку у вас уже есть переменная filled, делающая то же самое. Кроме того, сделайте filled глобальной переменной static, чтобы к ней можно было обращаться в main и во всех других методах. Кроме того, вы можете передать его в качестве аргумента для методов.

Исправленная программа выглядит следующим образом:

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

Пример выполнения:

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.

Не стесняйтесь комментировать в случае любой проблемы / сомнения.

0 голосов
/ 29 марта 2020

Спасибо, Арвинд Авина sh! Моя исправленная программа дана:

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
0 голосов
/ 28 марта 2020

Я помещаю строку int numberOfSeatsAvailable = 28; в объявлении переменной и numberOfSeatsAvailable--;
System.out.println («Есть» + numberOfSeatsAvailable + «Доступные места».); System.out.println (""); после того, как X расположен в месте сиденья l oop. Я все еще работаю над дозорной q для выхода.

...