index
- размер массива cities
. Итак, когда вы приходите к конкретной позиции, где cities[i].getPopulation() < population
является true
, вы будете двигаться все города с позиции i + 1
до конца массива index - 1
на позиции i
в index - 2
, и сделать это с:
for (int j = i; j < index - 1; j++) {
cities[j] = cities[j + 1];
}
Итак, город с небольшая популяция в позиции i
, теперь j
, будет удалена путем переопределения ее citiescities[j + 1]
, а citiescities[j + 1]
будет переопределяться citiescities[j + 2]
и т. д. до конца массива. Так, на позиции citiescities[index - 2]
будет такой же, как citiescities[index - 1]
, поэтому мы должны удалить его, так что вы поместите cities[--index] = null;
, где index
будет первым уменьшенное (вот почему --
будет влево от index
), и cities[oldIndex - 1]
будет null
. Это также поможет с циклом for
не доходить до первого значения index
значение в массиве, но до последнего города в array
, то есть.
Теперь, поскольку ваш индекс i будет увеличен в следующем шаге цикла, но вы переместили следующий город в положение i, вы должны уменьшить i
, чтобы проверить этот город, вот почему i
в конце.
Обратите внимание, что с этим вы по-прежнему будете иметь полный длинный массив, как и раньше, поэтому заполнены нулями, если есть города с меньшей численностью населения, чем указано. Возможно, лучший подход - скопировать его в новый массив размером index
, который вы получили в конце for
(обратите внимание: что-то похожее на то, что ArrayList
делает, когда вы удаляете элемент из него).
Нет, этот метод удаляет все города с населением под заданным лимитом. Кстати, он делает это очень неэффективно (O (N²)) и должен быть запрещен. –
Lol и как бы вы закодировали этот метод? –
В одном цикле пакет слева содержит все элементы. –