java - 飞机座位程序(二维数组)
问题描述
我有一个飞机座位程序,但我不知道如何让它打印仍然可用的座位数以及如何让它在我输入 q 时退出。任何帮助将不胜感激。真诚的,广范
我不确定在哪里放置 count++ 来为已填充的座位编号,以及如何设置哨兵 q 以便程序退出。座位安排的打印输出很好,X 去应该的地方。
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
解决方案
你已经声明了很多不必要的变量,例如你根本不需要count
,因为你已经有一个filled
变量在做同样的事情。此外,makefilled
作为全局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.
如有任何问题/疑问,请随时发表评论。