java - 使用数组在特定行预订电影票

标签 java arrays jsp multidimensional-array collections

我们必须检查座位情况并在同一排连续预订两张票。 如果门票不可用或者如果从两个不同的行预订了两张门票,那么我们必须抛出异常(使用数组) 条件1:如果我选择第七和第八个座位,因为它们来自不同的排,我们不应该允许他们。 条件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("\t");
        }
        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;
    }
}

最佳答案

第二个TicketFlag 未正确检查:

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 的倍数),您还可以在 for 循环中使用 j 值。这取决于你。检查余数的方法:

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

关于java - 使用数组在特定行预订电影票,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59767898/

相关文章:

c - 在 C 中平均成绩

javascript - 如何修复浏览按钮的初始 uri

jsp - 一般 tomcat (v7) 404 重定向到外部 url

Java - 构造函数将 null 分配给 String 而不是所需的值

javascript - 如何查看一个数组是否与另一个数组相同以及为什么尝试查看它们是否 === 将第一个数组更改为第二个数组?

java - Tomcat 6.0.29 和 Apache2 Proxy 将渲染 text/html 作为 text/plain 传递

c - 如何将一维数组复制到另一个二维数组的一部分,反之亦然?

mysql - 如何将数据库表显示到JSP页面中的表中

java - 2015年64位Linux上的Java阻塞IO解决了C10K问题吗?

java - 如何在 ListView 中显示firebase数据?