• 电影院座位连坐实现


    **一、实现在线选座位功能
    怎么实现连坐,
    实际分析
    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) + "连坐!!! " + "连坐数为");
    // 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] + " ");

    }
    //
    }


    为什么要写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) + "连坐!!! " + "连坐数为");
    //
    // for (int n = 0; n < (m + 2); n++) {
    // System.out.print(list.get(i)[n] + " ");
    // }
    // }
    }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) + "连坐!!! " + "连坐数为");
    // 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] + " ");

    }
    //
    }
    // 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

  • 相关阅读:
    【产品经理】原型设计工具
    Android进阶推荐书籍
    EventBus学习笔记(一)
    Android APT
    注解学习笔记(二)
    Android开发的小经验总结(上)
    Android开发的小经验总结(下)
    Windows环境下Android Studio v1.0安装教程
    Android-Universal-Image-Loader 图片异步加载类库的使用
    Android 官方推荐 : DialogFragment 创建对话框
  • 原文地址:https://www.cnblogs.com/xwd2366846227/p/11379526.html
Copyright © 2020-2023  润新知