Этот метод должен удалить все вхождения значения toRemove из массиваList. Остальные элементы должны быть просто смещены в начало списка. (размер не изменится.) Все «лишние» элементы в конце (однако многие вхождения toRemove были в списке) должны быть просто заполнены 0. Метод не имеет возвращаемого значения, и если в списке нет элементов, это не должно иметь никакого эффекта. Нельзя использовать remove() и removeAll() из класса ArrayList.Понимание этого метода удаления метода с помощью массиваList
Метод подписи:
public static void removeAll(ArrayList<Integer> list, int toRemove);
Решение:
public static void removeAll(ArrayList<Integer> list, int toRemove) {
for (int i = 0; i < list.size(); i++) {
if (list.get(i) = toRemove) {
for (int j = i + 1; j < list.size(); j++) {
list.set(j - 1, list.get(j));
}
list.set(list.size() - 1, 0);
i--;
}
}
Я понимаю, что первый цикл и если заявление хорошо. Поскольку нужно было бы итерации через весь массивList один за другим и для каждого индекса с числом, присутствующим в проверке arrayList, если оно есть, на самом деле целое число toRemovee. После этого я теряюсь.
Почему еще один цикл? Почему мы берем предыдущую переменную цикла и добавляем 1 к ней? Почему в этом втором цикле мы используем параметры «list» и используя метод set? почему j - 1? Почему list.get (j)? Почему после этого второго цикла есть строка: list.set (list. Sise() - 1, 0)? Почему i--?
Есть много движущихся частей, и я хотел бы понять логику.
Спасибо
Это не скомпилировано. – shmosel
* «Почему еще один цикл?» * Соответствует требованиям для * «Остальные элементы следует просто сдвинуть в начало списка» *. Может быть, вы должны прикрепить точку останова и пройти через код и посмотреть, как это изменяется. – MadProgrammer
@MadProgrammer Спасибо. Я не понимаю, как он переходит к началу списка. – jun