Вторая петля перемещает всех рабочих на одно место ближе к началу массива. Это делается для того, чтобы избежать «отверстий» в массиве (это произойдет, если вы установите только элемент null
). Вот что происходит:
if(worker[i].getName().startsWith(s))
Это проверяет, следует ли удалить работника с индексом i.
for(int j = i; j < index - 1; j++)
{
Это для цикла перебирает всех работников с индексом больше или равен I, следовательно, начиная с работником должен быть удален. Он останавливается со второй до последнего индекса, так как он также обращается к работнику с индексом J + 1.
worker[j] = worker[j + 1];
Это здесь перемещает рабочий с индексом J + 1 в положение у. Это перезаписывает работника, который будет удален с рабочим со следующим более высоким индексом. Все остальные рабочие только сдвинуты.
}
worker[--index] = null;
Здесь последний рабочий устанавливается в нулевое значение, так как он был сохранен во втором по последней позиции во время цикл. Это гарантирует, что последний рабочий не находится в массиве дважды. Также индекс (число работников) уменьшается с --index
, так как в списке меньше одного работника.
i--;
}
Теперь я декрементируется, как это уже показатель следующего рабочего, чтобы проверить и цикл будет увеличивать его снова. Без этого рабочий после того, как рабочий только что удалил, не будет проверен.
Что представляет собой переменная индекса и были ли вы ее инициализировать? – theVoid