寻找相邻的座位以便预订火车

时间:2015-02-18 08:40:51

标签: java

我已经为商务舱和经济舱构建了一个保持2 ArrayList<Seating>的对象列车。

我的座位对象有一个座位数组列表

List<Seating> business_class = new ArrayList<Seating>();
List<Seating> economy_class = new ArrayList<Seating>();
int bCount = 1;
int eCount = 10;
for(int i = 0; i < rowNumber; i++)
{
    business_class.get(i).addSeat(new Seats(Integer.toString(bCount), "A"));
    business_class.get(i).addSeat(new Seats(Integer.toString(bCount), "B"));
    business_class.get(i).addSeat(new Seats(Integer.toString(bCount), "C"));
    business_class.get(i).addSeat(new Seats(Integer.toString(bCount), "D"));
    business_class.get(i).addSeat(new Seats(Integer.toString(bCount), "E"));
    business_class.get(i).addSeat(new Seats(Integer.toString(bCount), "F"));

    economy_class.get(i).addSeat(new Seats(Integer.toString(eCount), "A"));
    economy_class.get(i).addSeat(new Seats(Integer.toString(eCount), "B"));
    economy_class.get(i).addSeat(new Seats(Integer.toString(eCount), "C"));
    economy_class.get(i).addSeat(new Seats(Integer.toString(eCount), "D"));
    economy_class.get(i).addSeat(new Seats(Integer.toString(eCount), "E"));
    economy_class.get(i).addSeat(new Seats(Integer.toString(eCount), "F"));
    bCount++;
    eCount++;
}


    1A / 1B / 1C || 1D / 1E / 1F
    2A / 2B / 2C || 2D / 2E / 2F

我的java程序可以添加single passenger or a group。对于我的团体预订,我必须寻求最大数量的可用adjacent seating。我坚持这种方法。我已经编码了它,但它是一个混合物,如果和其他如果声明考虑到所有可能的座位组合。该方法有超过600行if-else语句...我要求一种更简单,更有效的方法来查找组的相邻座位。

相邻座椅的更多细节
例如,如果所有座位都是空的,那么我将有6个相邻的座位。如果我有6个小组成员,我会填满整行。如果我有7个小组成员。如果有任何可用的话,或者在(seatNumber)A - > (seatNumber)F

如果乘客位于1A和1F,那么我将有2套相邻的2个座位1B / 1C和1D / 1E。
如果有一组4人,则那4人将填补这些席位。如果有一组3,那么1B / 1C || 1D将被填补。

这就是这种特殊相邻座位方法的逻辑。商务舱和经济舱在座位上没有任何关系。

1 个答案:

答案 0 :(得分:0)

我会建议你:

创建方法seat.isFree();,如果座位空闲,则返回true,否则返回false

然后迭代你班级的每一个座位,并寻找你所在行的第一个免费Seat。它看起来像是:

Seat freeSeat = null;
int length = 0;
for( each line ){
    for( each seat){
        Seat seat = seat.get(indexInLine);
        if(seat.isFree()){
            if(freeSeat == null){
                freeSeat = seat;
                length = 1;
            } else
                length++;
        } else {
            if(freeSeat != null){
                yourList.add(seat, length);
            }
            freeSeat = null;
        }
    }
    if(freeSeat != null){//So if the last seat of the line is also free add it to the free seat list
        yourList.add(seat, length);
    }
}

list的目的是包含Seatint个对象的列表,这些对象代表第一个免费Seat以及该行中的免费席位数之后(包括第一个)。

然后你会在你的名单中获得每个邻居的免费席位。

您只需选择列表的第一个元素,其(int值)长度对您的所有组都很重要,如果没有,则将该组分开,而您却找不到它们的邻接位置。