我已经为商务舱和经济舱构建了一个保持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将被填补。
这就是这种特殊相邻座位方法的逻辑。商务舱和经济舱在座位上没有任何关系。
答案 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
的目的是包含Seat
和int
个对象的列表,这些对象代表第一个免费Seat
以及该行中的免费席位数之后(包括第一个)。
然后你会在你的名单中获得每个邻居的免费席位。
您只需选择列表的第一个元素,其(int值)长度对您的所有组都很重要,如果没有,则将该组分开,而您却找不到它们的邻接位置。