2015-02-18 3 views
0

Я построил объект, который держит 2 ArrayList<Seating> для бизнес-класса и эконом-класса.Поиск соседних сидений для бронирования поезда

Мой Рабочий Объект имеет ArrayList мест

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 членов группы. 1 будет помещен в строку раньше, если любой из них доступен или после того, если любой из них начнется с (номер сиденья) A -> (seatNumber) F

Если есть пассажиры, расположенные на 1А и 1F, чем у меня будет 2 комплекта из 2 смежных 1B/1C и 1D/1E.
В случае, если существует группа из 4 человек, то эти 4 будут заполнять эти места. В случае, если существует группа из 3, то 1B/1C || 1D будет заполнен.

Это логика этого конкретного смежного метода посадки. Бизнес и экономический класс не имеют отношения к размещению.

+0

Поиск управления свободным пространством. Это аналогичная проблема. – BluesSolo

ответ

0

Si я хотел бы предложить вам:

создать метод 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 и количество свободных мест в линии после него (в том числе первого).

Затем вы получите все свободные места в вашем списке.

Вам просто нужно выбрать первый элемент списка, длина которого (значение целой) важна для всей вашей группы, или если нет, отделите группу, пока вы не можете найти места для прилегания к ним.

+0

Какова цель строки 'yourList.add (сидение, длина)' – user2197917

+0

Цель создания списка элементов, содержащих первое бесплатное 'Seat' каждой строки и количество свободных мест после него на линии. –

Смежные вопросы