2

メソッド「public static int[][] SellSeatByPrice」のパラメーターがどうあるべきかを理解できないようです。ユーザーに (座席の) 価格を要求し、その価格が採用されているかどうか (= 0 の場合) を調べ、そうでない場合は値 0 を割り当てる必要があります。

以下は私のコードです、助けてください!

import java.util.Scanner;
/**
 * Write a description of class A10_TheaterSeating here.
 *
 * @author (your name)
 * @version (a version number or a date)
 */
public class A10_TheaterSeating
{
public static void main(String args[])
{
    System.out.println("***Welcome to the Ticket Choice App!***");
    System.out.println();

    int[][] theaterSeats = //set values in seating chart array
    {
        {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, 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},
        {20, 20, 30, 30, 40, 40, 30, 30, 20, 20},
        {20, 30, 30, 40, 50, 50, 40, 30, 30, 20},
        {30, 40, 50, 50, 50, 50, 50, 50, 40, 30}
    };
    int[][] seats = theaterSeats;

    printArray(seats); //print the seating chart
    System.out.println();

    //Defining variables
    String str = "";
    String input = "";

    while (!input.equalsIgnoreCase("Q"))
    {
        System.out.print("Select 'S' to pick a seat, 'P' choose a price or 'Q' to quit:     ");
        Scanner in = new Scanner(System.in);
        input = in.next();

        if (input.equalsIgnoreCase("S"))
        {
            System.out.print("Enter row and seat number desired: ");
            int row = in.nextInt();
            int seat = in.nextInt();
            System.out.println();
            sellSeatByNumber(seats, row, seat);

            printArray(seats);
            System.out.println();
        }
        else if (input.equalsIgnoreCase("P"))
        {
           System.out.print("Enter price of seat desired: ");
           int price = in.nextInt();
           System.out.println();
           sellSeatByPrice(seats, row, seat, price);

           printArray(seats);
           System.out.println();
        }
    }
    System.out.println();
    System.out.println("Thank you for choosing the ticket choice app.");
    System.out.println();
}

public static void printArray(int[][] currSeat)
{
    final int ROWS = 9;
    final int COLUMNS = 10;

    for(int i = 0; i < ROWS; i++)
    {
        for (int j = 0; j < COLUMNS; j++)
        {
            System.out.print(currSeat[i][j] + "\t");
        }
        System.out.println();
    }
}

public static int[][] sellSeatByNumber(int[][] seats, int row, int seat)
{
    if (row <= 0 || row > 9)
    {
        if (seat <= 0 || seat > 10)
        {
            System.out.print("Please enter a valid row and seat: ");
        }
    }
    if (seats[row][seat] == 0)
    {
        System.out.print("That seat is taken. Please select another seat: ");
    }
    else
    {
        seats[seats.length - row][seat - 1] = 0;
    }
    return seats;
}

public static int[][] sellSeatByPrice(int[][] seats, int row, int seat, int price)
{
    if (seats[row][seat] = price)
    {
        seats[seats.length - row][seat - 1] = 0;
    }
    return seats;
}
}
4

1 に答える 1

1

パラメータは問題ないようです - 内部ロジックと構文が正しくありません。

メソッドを使用しstatic、シート マトリックスに沿って渡すので、それは問題ありませんが、渡される値がマトリックスの境界内にあることを確認する必要があります。そうしないと、例外が発生します。

たとえば、 では境界をチェックしませんsellSeatByPrice()。そうしないと、偽の列と座席の組み合わせでプログラムが破綻する可能性があります。

また、与えられた比較が正しくない場合もあります:

if (seats[row][seat] = price)

本当にあるべき

if (seats[row][seat] == price)

そのまま代入、プリミティブ比較=です。==

さらに、 ではsellSeatByNumber()、範囲外の列/座席の組み合わせが爆発するため、問題が発生する可能性があります。あなた境界をチェックします - 称賛 - しかし、それらがそれらの境界の外にある場合、あなたは何も返しません。実際には、IllegalArgumentException範囲外に出ている場合は an を発生させる必要があります。または、行列を変更せずに返すことができます (より簡単な場合があります)。

于 2012-11-07T03:43:48.850 に答える