бронирование билетов в кино в определенной строке с использованием массива

Мы должны проверить наличие мест и забронировать два последовательных билета в одном ряду. Если билеты не доступны или если два билета забронированы из двух разных рядов, мы должны сгенерировать исключение (используя массивы). Условие 1: если я выбираю 7-е и 8-е место, поскольку это из другого ряда, мы не должны их разрешать. Условие 2: если я вхожу в место с номерами 100 и 101, поскольку указанные места не доступны, мы не должны бронировать места.

It would be great, if someone could help out on this,

демо-пакет;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.Arrays;
import java.util.List;

public class Newtable {

    public static void printRow(int[] row) {
        for (int i : row) {
            System.out.print(i);
            System.out.print("	");
        }
        System.out.println();
    }

    public static void main(String[] args) throws Exception {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        int twoDm[][] = new int[5][7];
        int i, j, k = 1, m = 2;
        int ab = 0;
        int firstticket;
        int secondticket;
        boolean firstTicketFlag = false;
        boolean secondTicketFlag = false;

        for (i = 0; i < 5; i++) {
            for (j = 0; j < 7; j++) {
                twoDm[i][j] = k;
                k++;
            }
        }

        for (int[] row : twoDm) {
            printRow(row);
        }

        // this loop repeats the reserving process (and printing seats) 5 times
        for (int l = 0; l < 5; l++) {

            System.out.print("Enter the Seats number to reserve: ");
            firstticket = Integer.parseInt(br.readLine());
            secondticket = Integer.parseInt(br.readLine());

            firstTicketFlag = containsCheck(twoDm, firstticket);
            secondTicketFlag = containsCheck(twoDm, firstticket);

            if (firstTicketFlag && secondTicketFlag) {

                if (firstticket == (secondticket - 1)) {

                    k = 1;
                    m = 2;
                    for (i = 0; i < 5; i++) {
                        for (j = 0; j < 7; j++) {

                            if (k == firstticket && m == secondticket) {
                                // here we check if the seat has already been
                                // reserved
                                ab = m - 1;
                                if (twoDm[i][j] == 0 && twoDm[i][j+1] == 0) {
                                    throw new Exception("That seat has already been reserved");
                                }
                                // if its not reserved then reserve it
                                else {
                                    //ab = m - 1;
                                    twoDm[i][j] = 0;
                                    twoDm[i][j+1] = 0;
                                }
                            }
                            k++;
                            m++;
                        }
                    }
                    // print updated array of seats
                    for (int[] row : twoDm) {
                        printRow(row);
                    }

                } else {
                    throw new Exception(" select two seats in the same row");
                }

            } else {
                System.out.println("Please enter the available seat numbers");
            }
        }
    }

    private static boolean containsCheck(int[][] twoDm, int ticket) {
        // TODO Auto-generated method stub
        boolean flag = false;
        for (int[] a : twoDm) {
            if (a.equals(ticket)) {
                flag = true;
            }
        }
        return flag;
    }
}

Всего 1 ответ


SecondTicketFlag не проверен правильно:

secondTicketFlag = containsCheck(twoDm, firstticket);
//should be
secondTicketFlag = containsCheck(twoDm, secondticket);

containsCheck нужен еще один цикл for для проверки отдельных значений каждого места внутри строки (одномерный массив):

private static boolean containsCheck(int[][] twoDm, int ticket) {
        // TODO Auto-generated method stub
        boolean flag = false;
// added another for loop, and changed "equals" to == since the values are int
        for (int[] oneDm : twoDm) {
            for (int individualSeat : oneDm) {
                if (individualSeat == ticket) {
                    flag = true;
                }
            }
        }
        return flag;
    }

И если первое место ИЛИ второе место забронировано, то вы хотите вернуть ошибку,

if (twoDm[i][j] == 0 && twoDm[i][j+1] == 0)
//should be 
if (twoDm[i][j] == 0 || twoDm[i][j+1] == 0)

Извините за любые ошибки форматирования (при первом комментировании) и, надеюсь, это решит проблему, с которой вы столкнулись.

РЕДАКТИРОВАТЬ: у вас есть различные способы проверить, что места находятся в одном ряду, учитывая, как вы устанавливаете значения мест, я бы использовал оператор остатка (%)

Если первое место имеет остаток, отличный от 0, это означает, что два места находятся в одном ряду (первое место должно быть между 1-6, 8-13, 15-20 ... оно не может быть кратным 7), вы также можете использовать значение j в цикле for . Это зависит от вас. Способ проверки остатка:

if(firstticket % 7 == 0){ System.out.println("The seats are not in the same row");}

Есть идеи?

10000