首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用数组在特定行中预订电影票

使用数组在特定行中预订电影票
EN

Stack Overflow用户
提问于 2020-01-16 10:43:56
回答 1查看 1.4K关注 0票数 0

我们必须检查座位的空位情况,并在同一排预定两张连续的票。如果没有票,或者两张票是从两个不同的行预订的,那么我们必须抛出一个异常(使用数组)条件1:如果我选择了第7和第8座位,因为它来自不同的行,我们不应该允许它们。条件2:如果我输入座位为100和101,因为指定的座位是空的,我们就不应该预定座位。

代码语言:javascript
复制
It would be great, if someone could help out on this,

包装演示;

代码语言:javascript
复制
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;
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-01-16 11:08:04

未正确检查secondTicketFlag:

代码语言:javascript
复制
secondTicketFlag = containsCheck(twoDm, firstticket);
//should be
secondTicketFlag = containsCheck(twoDm, secondticket);

containsCheck需要另一个for循环来检查行内每个座位的单个值(一维数组):

代码语言:javascript
复制
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;
    }

如果第一个座位或第二个座位预定了,那么你想要返回错误,

代码语言:javascript
复制
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值。那随你的便。检查剩余部分的方法:

代码语言:javascript
复制
if(firstticket % 7 == 0){ System.out.println("The seats are not in the same row");}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59767898

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档