Я сделал небольшую систему, которая занимает сиденьеСчет, чтобы заполнить кинотеатр определенным количеством мест (без рядов). Теперь я создал метод, который заполняет места и возвращает карту, карта возвращает место, в котором определенное количество мест свободно (например, 3-2 означает, что рядом с каждым из них начинается два места, начиная с места 3.
Это работает довольно хорошо, но если, например, я скажу, что максимум 5 мест, а место 5 свободно, метод не возвращает его на карту.
Вот код, используемый:
Сиденье для объекта
public class Seat {
public Integer availability;
public Integer seatNumber;
public boolean IsFree() {
if(availability == 0){
return true;
}
else return false;
}
public String toString() {
return "{ " + seatNumber + ", free: " + IsFree() + " } ";
}
}
Этот метод создает LinkedList и заполняет доступность значением «1» (занято) или «0» (доступно) с помощью метода giveRandomAvailability ()
static LinkedList fillList(int seats){
LinkedList<Seat> list = new LinkedList<Seat>();
seats = seatCount;
for(int i = 0; i < seats; i++){
Seat seat = new Seat();
seat.availability = giveRandomAvailability();
seat.seatNumber = (i + 1);
list.add(seat);
}
return list;
}
Это метод, который не работает правильно, он должен заполнить карту доступными местами, но когда последний элемент доступен, он не отображается.
Вот пример вывода:
[{ 1, free: true } , { 2, free: true } , { 3, free: false } , { 4, free: true } , { 5, free: true } ]
{1=2}
Вы можете видеть, что первая часть обрабатывается хорошо, но она также должна содержать 4 = 2.
Метод:
static Map fillSeats(){
int n = 3;
LinkedList<Seat> newList = fillList(seatCount);
int consecutiveLength = 0; // Consecutive free seats length
int index = 0;
int startIndex = -1; // Store the start of consecutive free seats
System.out.println(newList.toString());
Map<Integer, Integer> consecutiveMap = new HashMap<>(); // Store startIndex -> length
for (Seat seat : newList) {
if (seat.IsFree()) {
if (startIndex < 0) {
startIndex = index;
}
consecutiveLength ++;
} else {
consecutiveMap.put(startIndex + 1, consecutiveLength);
if (consecutiveLength == n) {
// Found, do something here
}
// Reset
startIndex = -1;
consecutiveLength = 0;
}
index++;
}
return consecutiveMap;
}
Я не могу найти проблему здесь, помощь будет принята с благодарностью.