2015-01-16 9 views
0
private static void printInvoice() { 

    for (int i = customerList.size()-1; i >= 0; i--) { 
     for(int n = taskChecker.size() -1; n >=0 ; i--){ 
     System.out.println(customerList.get(i).getName()); 
     customerList.get(i).invoiceForCustomer(); 
     taskChecker.remove(n);  

    } 
} 

Это, Что получить распечатан:Как удалить элементы из ArrayList

Sven 9900 Task: Rosta knäck Date: 2014-02-11 Numbers of hours: 1 
Tor 4950 Task: Rosta bröd Date: 2013-12-12 Numbers of hours: 1 
Oden 4950 Task: Rosta bröd Date: 2013-12-12 Numbers of hours: 1 

Теперь я хочу, чтобы удалить задачи (Oden 4950 Задача: Роста Брод Дата: 2013-12-12 Количество часов : 1) после того, как я распечатал их. Я действительно смущен тем, как я должен это делать ...

+2

Использование 'Iterator' от' list' и называют 'итератор # remove' вместо' List # remove'. –

+0

для (int i = taskChecker.size() -1; i> = 0; i--), вероятно, неверно. Вы имели в виду (int n = taskChecker.size() -1; n> = 0; n--), я уверен. Здесь вам нужно уменьшить n. –

+0

Этот код для меня не имеет смысла. Готов поспорить, вам нужно переосмыслить это. По крайней мере, он не печатает то, что вы написали. –

ответ

3

Вы не можете удалить элементы из списка, который вы просматриваете в настоящее время, без использования Iterator. Он составляет ConcurrentModificationException. Как указано в вашей проблеме, используйте объект Iterator, чтобы разрешить удаление из списка, в котором вы работаете.

Так же, как простой пример использования Iterator:

Iterator<Object> it = listOfObjects.iterator(); 
while (it.hasNext()) 
{ 
    Object o = it.next(); 
    it.remove(); <--- removes the last object returned from Iterator.next() from the underlying collection 
} 
Смежные вопросы