电影院座位连坐实现

一、实现在线选座位功能
怎么实现连坐,
实际分析
1、同一排构成连坐
2、座位可用
3、大于一形成 连坐
实现思路:

前端传入一个座位的坐标的一个String的集合,前端可以传入混乱的坐标。后台来进行筛选,排序、分割数组,可以使用Arrays.sort()方法来进行排序。排完序的数组按照同一排进行拆分,不是同一排构不成连坐,所以先根据同一排来进行拆分数组。先定义好拆分数组的起始位置与结束位置,定义start与end,然后在循环里判断如果不再同一排了,就使用 list.add(Arrays.copyOfRange(arrs, start, end + 1));生成一个新的数组放入list集合中。但是呢,拆分到最后一个数组是,因为if成立所以不执行else,需要手动维护进去最后一个数组。这样数组基本拆分完成,会拆分成按照同一排生成的所对应的数组。
拆分完成之后,就可以根据每一个同一排的数组来进行判断是否可以构成连坐。先写一个for循环,循环长度为list的长度。进去直接判断集合里的数组长度是否可以大于一,大于一形成连坐。如果不成立就退出循环。for (int j = 0; j < list.get(i).length - 1; j++) {//判断几次 排数相等 length -1这里需要长度 - 1,要不然会出现数组下标越界。然后判断横坐标是否相同if (list.get(i)[j].split("-")[0] .equals(list.get(i)[j + 1].split("-")[0])) {//同一排形成连坐,然后再写一个循环来测试判断了几次y坐标,因为后面确定连坐的起始位置要使用。
下一步判断y坐标if (Integer.parseInt(list.get(i)[m].split("-")[1]) + 1 ==
Integer.parseInt(list.get(i)[m + 1].split("-")[1])) {
如果坐标相加1两个相等的话,则说明为连坐。这里必须写座位的真实坐标,不可以写座位的编号,因为编号每个地方不统一,有的是双号连坐,有的单号,每家都不一样,所以为了复用性,需要使用座位的真实坐标 。
最核心的部分属于if (re == m + 1) {

                            System.out.println("可以成为" + (m + 2 - no) + "连坐!!!\n" + "连坐数为");
//                            System.out.println("次数" + (m + 2 - no));
//                            System.out.println(no);
                            for (int n = no; n < (m + 3 - no); n++) {
                                System.out.print(list.get(i)[n] + "\t");

                            }
//
                        }

为什么要写no呢,因为要判断连坐的起始位置,与之对应的结束位置。(m + 2 - no) 的意思是连坐至少需要两位,减去前面执行的次数,就是可以构成的连坐数。然后在底下的循环里打印形成连坐的座位的具体坐标。几连坐显示几个,如果 n < (m + 3 - no);这里写成m+2会出现多遍历出一个的问题,所以得要加3。
至此,连坐的核心的代码就已经完毕了,还有一些小问题,等待后续更新!!!

具体代码如下:

	package cn.pn.dao;
	
	import java.util.ArrayList;
	import java.util.Arrays;
	import java.util.List;
	
	public class ConSeat {
	
	    public static Object isConSeat(String[] arrs){
	        int conSeatNum = 4; //连坐数
	        //新建一个集合来保存分割后的同一排的数组
	        List<String[]> list = new ArrayList<>();
	
	        int start = 0;
	        int end = 0;
	
	        System.out.println("之前的数组" + Arrays.toString(arrs));
	        //利用sort进行排序
	        Arrays.sort(arrs);
	        System.out.println("排序之后的数组" + Arrays.toString(arrs));
	
	        //按照同一排进行拆分
	        for (int i = start; i < arrs.length - 1; i++) {
	            if (arrs[i].split("-")[0].
	                    equals(arrs[i + 1].split("-")[0])) {
	                end++;
	            } else {
	//                start = end;
	//                System.out.println("start" + start);
	//                System.out.println("end" + end);
	                //Arrays.copyOfRange(arrs,5,10)复制数组从 5  开始到 10
	                list.add(Arrays.copyOfRange(arrs, start, end + 1));
	                end++;
	                //开始等于结束,下次遍历开始的位置
	                start = end;
	            }
	            //走到最后一块不执行else ,手动维护一个
	//            System.out.println(i);
	        }
	        //手动增加最后一个数组,只执行if,所以得要自己增加
	        list.add(Arrays.copyOfRange(arrs, start, arrs.length));
	
	        System.out.println("-------------");
	
	        //Arrays.copyOfRange(arrs,5,10)复制数组从 5  开始到 10
	//        list.add(Arrays.copyOfRange(arrs,5,10));
	//        list.add(Arrays.copyOfRange(arrs,5,10));
	//        list.add(Arrays.copyOfRange(arrs,5,10));
	
	        for (String[] strings : list) {
	            System.out.println(Arrays.toString(strings));
	        }
	
	//        System.out.println(num);
	//        System.out.println(arrs.length);
	
	//        String[] coordinate = {("21-2"), ("22-3"), ("21-4"), ("21-5")}; // 坐标
	
	        //截取排
	//        System.out.println(coordinate[1].split("-")[0]);
	        //截取列
	//        System.out.println(coordinate[1].split("-")[1]);
	
	        int rs = 0; //判断的结果
	//        int re = 0; //判断是否构成连坐的次数
	//        int no = 0;//失败的次数
	
	//        System.out.println("coordinate.length" + coordinate.length);
	//        System.out.println(coordinate[0].split("-")[0].
	//                        equals(coordinate[1].split("-")[0]));
	
	        //删除集合
	//        list.remove(0);
	//        for (int i = 0; i < 7; i++) {
	//            list.remove(1);
	//        }
	//        System.out.println(list.size());
	
	
	
	        for (int i = 0; i < list.size(); i++) {
	
	            if (list.get(i).length > 1) {//大于一形成连坐
	                rs = 0;
	                System.out.println("数组" + Arrays.toString(list.get(i)));
	//                System.out.println(i);
	//                System.out.println("list.get(i).length " + (list.get(i).length - 1));
	//                System.out.println("需要的连坐数是" + i);
	
	                for (int j = 0; j < list.get(i).length - 1; j++) {//判断几次 排数相等 length -1
	//                    System.out.println("---" + list.get(i)[j].split("-")[0].
	//                            equals(list.get(i)[j + 1].split("-")[0]));
	                    if (list.get(i)[j].split("-")[0].
	                            equals(list.get(i)[j + 1].split("-")[0])) {//同一排形成连坐
	
	                        rs++;  //成功 + 1
	                    }
	//                    System.out.println("rs1" + rs);
	                }
	//            System.out.println("rs" + rs);
	//            System.out.println("rssssss" + (rs == list.get(i).length - 1));
	
	                int re = 0;
	                int no = 0;
	                if (rs == list.get(i).length - 1) {
	                    for (int m = 0; m < list.get(i).length - 1; m++) {//判断几次
	
	//                        System.out.println("执行了没有" + (Integer.parseInt(list.get(i)[m].split("-")[1]) + 1 ==
	//                                Integer.parseInt(list.get(i)[m + 1].split("-")[1])));
	                        if (Integer.parseInt(list.get(i)[m].split("-")[1]) + 1 ==
	                                Integer.parseInt(list.get(i)[m + 1].split("-")[1])) {
	
	                            re++;
	//                            if (re == m + 1) {
	//                                System.out.println("可以成为" + (m + 2) + "连坐!!!\n" + "连坐数为");
	//
	//                                for (int n = 0; n < (m + 2); n++) {
	//                                    System.out.print(list.get(i)[n] + "\t");
	//                                }
	//                            }
	                        }else {
	                            re ++;
	                            System.out.println("走了");
	                            no ++;
	                            continue;
	                        }
	//                        System.out.println("re" + (re == m + 1));
	//                        System.out.println("re" + (re));
	//                        System.out.println("m" + (m + 1));
	                        if (re == m + 1){
	                            System.out.println("可以成为" + (m + 2 - no)  + "连坐!!!\n" + "连坐数为");
	//                            System.out.println("次数" + (m + 2 - no));
	//                            System.out.println(no);
	                            for (int n = no; n < (m + 3 - no); n++) {
	                                System.out.print(list.get(i)[n] + "\t");
	
	                            }
	//
	                        }
	//                        System.out.println("需要判断" + (i + 1) + "次");
	                    }
	                } else {
	                    System.out.println("不是同一排哦");
	                    continue;
	                }
	            } else {
	                System.out.println("只有一个座位构不成连坐哦!");
	            }
	        }
	//        System.out.println(list.get(1)[3].split("-")[0]);
	//        System.out.println(Arrays.toString(list.get(1)));
	//        System.out.println(list.get(1)[1]);
	        return null;
	    }
	
	
	    public static void main(String[] args) {
	
	       String[] arrs = {
	                ("21-6"), ("22-3"), ("11-1"), ("21-5"),("11-8"),("11-7"),
	                ("11-6"), ("24-5"), ("21-1"), ("31-5"),
	                ("21-8"), ("23-3"), ("6-5"), ("35-5"), ("21-7"),
	                ("11-5"), ("6-8"), ("31-1"), ("21-9"),
	                ("8-5"), ("8-8"), ("8-1"), ("8-6")};
	
	       ConSeat.isConSeat(arrs);
	    }
	}

输出结果:省略了很多测试时的注释代码。

	之前的数组[21-6, 22-3, 11-1, 21-5, 11-8, 11-7, 11-6, 24-5, 21-1, 31-5, 21-8, 23-3, 6-5, 35-5, 21-7, 11-5, 6-8, 31-1, 21-9, 8-5, 8-8, 8-1, 8-6]
	排序之后的数组[11-1, 11-5, 11-6, 11-7, 11-8, 21-1, 21-5, 21-6, 21-7, 21-8, 21-9, 22-3, 23-3, 24-5, 31-1, 31-5, 35-5, 6-5, 6-8, 8-1, 8-5, 8-6, 8-8]
	-------------
	[11-1, 11-5, 11-6, 11-7, 11-8]
	[21-1, 21-5, 21-6, 21-7, 21-8, 21-9]
	[22-3]
	[23-3]
	[24-5]
	[31-1, 31-5]
	[35-5]
	[6-5, 6-8]
	[8-1, 8-5, 8-6, 8-8]
	数组[11-1, 11-5, 11-6, 11-7, 11-8]
	走了
	可以成为2连坐!!!
	连坐数为
	11-5	11-6	可以成为3连坐!!!
	连坐数为
	11-5	11-6	11-7	可以成为4连坐!!!
	连坐数为
	11-5	11-6	11-7	11-8	数组[21-1, 21-5, 21-6, 21-7, 21-8, 21-9]
	走了
	可以成为2连坐!!!
	连坐数为
	21-5	21-6	可以成为3连坐!!!
	连坐数为
	21-5	21-6	21-7	可以成为4连坐!!!
	连坐数为
	21-5	21-6	21-7	21-8	可以成为5连坐!!!
	连坐数为
	21-5	21-6	21-7	21-8	21-9	只有一个座位构不成连坐哦!
	只有一个座位构不成连坐哦!
	只有一个座位构不成连坐哦!
	数组[31-1, 31-5]
	走了
	只有一个座位构不成连坐哦!
	数组[6-5, 6-8]
	走了
	数组[8-1, 8-5, 8-6, 8-8]
	走了
	可以成为2连坐!!!
	连坐数为
	8-5	8-6	走了
	
	Process finished with exit code 0
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
vite+vue 是一种用于构建现代化的Web应用程序的工具链。它结合了Vite作为快速开发工具和Vue作为JavaScript框架,可以帮助我们更高效地开发电影院座位预定系统。 要实现电影院座位预定功能,可以按照以下步骤进行: 1. 创建Vue项目:使用Vite命令行工具创建一个新的Vue项目。可以通过运行以下命令来安装Vite并创建项目: ``` npm init vite@latest my-movie-app --template vue ``` 2. 设计座位布局:根据电影院座位布局设计页面,可以使用HTML和CSS来创建座位的UI组件。可以考虑使用Vue的组件化开发方式,将座位组件化,方便复用和管理。 3. 状态管理:使用Vue的状态管理工具(如Vuex)来管理座位的预定状态。可以在Vuex中定义一个座位状态数组,记录每个座位的预定情况。 4. 座位选择:在座位组件中,监听用户的点击事件,并根据点击情况修改座位的预定状态。可以通过绑定样式类来实现选中和未选中状态的切换。 5. 预定确认:在用户选择完座位后,提供一个确认按钮,点击后将选中的座位信息提交给后端进行处理。可以使用Vue的表单处理功能来实现数据的提交。 6. 后端处理:后端接收到座位信息后,可以进行相应的处理,如保存预定信息到数据库,并返回预定成功或失败的结果给前端。 7. 其他功能:根据需求,可以添加其他功能,如座位的价格显示、座位的分类(如VIP座位)、座位的搜索等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

卧虎3

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值