1

Java 帮助。

编写一个程序,在屏幕上打印座位表并提示用户选择座位或价格。通过将价格更改为 0(零)来标记已售出的座位。当用户指定座位时,请确保它可用。如果它不可用,通知用户并提示他们选择座位或价格。

老师希望行是 AI,列是 1-10 我无法得到这个,因为我没有在我的文科学校学习这个高级 Java。老师还希望它输出我无法做到的阶段。

public class TheatreSeating {
    public static void main(String[] args) { 


        // Two dimensional array to hold seats
        int[10][9] seatsArray = 
                 {{ 30, 40, 50, 50, 50, 50, 50, 50, 40, 30 },
                { 20, 30, 30, 40, 50, 50, 40, 30, 30, 20 },
                { 20, 20, 30, 30, 40, 40, 30, 30, 20, 20 },
                { 10, 10, 20, 20, 20, 20, 20, 20, 10, 10 },
                { 10, 10, 20, 20, 20, 20, 20, 20, 10, 10 },
                { 10, 10, 20, 20, 20, 20, 20, 20, 10, 10 },
                { 10, 10, 10, 10, 10, 10, 10, 10, 10, 10 },
                { 10, 10, 10, 10, 10, 10, 10, 10, 10, 10 },
                { 10, 10, 10, 10, 10, 10, 10, 10, 10, 10 }};
       String continueFlag = "Y";
        Scanner input = new Scanner(System.in);
        while (continueFlag.equals("Y") || continueFlag.equals("y")) {
            System.out.println("Please Select an option");
            System.out.println("1. Select Seat");
            System.out.println("2. Select Price");

            // Get selected option
            int option = input.nextInt();
            if (option == 1) {
                System.out
                        .println("Please enter the row number of seat (1-10):");
                // Subtract 1 as array starts from 0
                char row = input.nextInt() - 1;
                System.out
                        .println("Please enter the column number of seat (1-10):");
                // Subtract 1 as array starts from 0
                int column = input.nextInt() - 1;
                boolean seatAvailable = isSeatAvailable(seatsArray, row, column);
                if (seatAvailable) {
                    // Assign Seat
                    seatsArray[row][column] = 0;
                } else {
                    System.out.println("Requested seat is not available");
                }
            } else if (option == 2) {
                System.out
                        .println("Please enter the Price(10,20,30,40 or 50):");
                int price = input.nextInt();
                // Check available seat
                boolean found = false;
                for (int i = 0; i < seatsArray.length; i++) {
                    // Continue looking only if not found
                    if (found == false) {
                        for (int j = 0; j < seatsArray[i].length; j++) {
                            if (seatsArray[i][j] == price) {
                                // Assign the seat
                                seatsArray[i][j] = 0;
                                found = true;
                                // Exit from inner loop
                                break;
                            }
                        }
                    }
                }
            }
            printSeats(seatsArray);
            System.out.println("Do you want to enter more seats (Y/N)");
            continueFlag = input.next();
        }
        System.out.println("Bye");
    }

    private static void printSeats(int[][] seatsArray) {
        for (int i = 0; i < seatsArray.length; i++) {
            for (int j = 0; j < seatsArray[i].length; j++) {
                System.out.print(seatsArray[i][j] + " ");
            }
            System.out.println();
        }
    }

    private static boolean isSeatAvailable(int[][] seatsArray, int row,
            int column) {
        for (int i = 0; i < seatsArray.length; i++) {
            for (int j = 0; j < seatsArray[i].length; j++) {
                if (i == row && j == column && seatsArray[i][j] != 0) {
                    return true;
                }
            }
        }
        return false;
    }
}
4

1 回答 1

0

定义引用时不指定数组大小。

int[10][9] twoDArray; // ERROR!

您在分配内存时使用new关键字 as指定大小

int[][] twoDArray = new int[10][9];

但是,由于您是直接初始化,因此无需在任何地方指定大小。

int[][] twoDArray = { {0,0}, {1,1} }; // same as
int[][] twoDArray = new int[][] { {0,0}, {1,1} }; // but
int[][] twoDArray = new int[10][9] { {0,0}, {1,1} }; // ERROR!

您也不能将int表达式直接分配给char. 您需要在那里进行显式强制()转换,以让编译器知道您知道您可能会在那里失去一些精度,因为您将int一个更大的数据类型填充到较小的char数据类型中。

char row = (char) (input.nextInt() - 1);

但是,你根本不应该在char那里使用。将其更改int为您的column.

int row = input.nextInt() - 1;
于 2013-08-24T06:36:53.450 回答