#java #arraylist
#java #arraylist
Вопрос:
Мой Arraylist (образец) содержит: A : [ 0, 6, 0, 6, 0, 4, 8, 8, 2 ]
Я хочу удалить все 0, которые появляются в начале списка. Ожидаемый ответ: A : [ 6, 0, 6, 4, 8, 8, 2 ]
Я пытаюсь:
for(i=0; i<A.size(); i ){
if(A.get(i) == 0)
A.remove(i);
else break;
}
Мой вывод:
A : [6, 6, 4, 8, 8, 2]
Я полагаю, что при выполнении операции A.remove() индексы сдвигаются, поэтому, когда цикл выполняется во второй раз, индекс второго нуля становится 1 (ранее 2) и, таким образом, он также удаляется.
Какую альтернативу мне следует использовать?
Комментарии:
1. 1) найдите индекс последнего префикса 0 2)
sublist
.2. Подавляющее соглашение в Java заключается в том, что локальные переменные и поля экземпляра (иногда называемые переменными экземпляра) начинаются со строчной буквы. Поэтому,
a
а неA
если это экземплярArrayList
. При обращении за помощью полезно придерживаться стандартных соглашений, поскольку это облегчает понимание вашего кода людьми. (В любом случае, это хорошая идея.)3. Вы пробовали использовать Iterator? docs.oracle.com/javase/8/docs/api/java/util/Iterator.html
Ответ №1:
Проблема в том, что ваш i
будет увеличиваться одновременно с удалением элемента с самого начала. Итак, во втором цикле вы смотрите на индекс 1, но индекс 0 теперь имеет значение, на которое вы никогда не смотрели. Это сработало бы для вашего примера, потому что в начале есть только один 0, но не сработало бы с [0, 0, 6, 0]
.
Вместо этого используйте while
и смотрите только на индекс 0
:
while (A.size() > 0 amp;amp; A.get(0) == 0) {
A.remove(0);
}