Salve a tutti, sto sviluppando una sorta di gioco con delle palline che si muovono sullo schermo e per tenerne traccia sono inserite in una LinkedList che scorro con un ciclo for each (for(object o: listaPalline){ <codicegestione> })
All'interno del ciclo gestisco i movimenti e il disegno stesso di tutti gli oggetti, ma capita che se certe condizioni sono verificate debba eliminare o aggiungere oggetti alla lista.
Codice PHP:
for(object o: listaPalline){
if(<condizione>)
{
listaPalline.remove(o);
//ma anche
listaPalline.remove(o.oggettoCollegato); //non l'oggetto corrente ma ad esempio uno successivo o precedente sempre enlla lista
//oppure ancora, il caso piu fastidioso
funzioneCheEliminaOggetti(listaPalline);
}
//oppure
if(<condizione2>)
{
listaPalline.add(new pallina());
}
}
In entrambi i casi l'iteratore di listaPalline solleva l'eccezione ConcurrentModificationException.
(e ha anche ragione lui oltretutto....)
Non so bene quale potrebbe essere la soluzione migliore per risolvere questo problema. Fino ad ora avevo pensato a:
-Costruire un nuovo iteratore e una nuova lista che mi permetta di rimuovere/aggiungere oggetti a piacimento, facendo questo andrie pero a violare un meccanismo che non e' errato e la cosa sarebbe poco elegante ( e oltretutto ho idea che realizzare un nuovo iteratore e una nuova lista (seppure ereditati da quelli che uso attualmente) non sia una cosa proprio comoda...)
-Inserire gli oggetti da eliminare in una lista per poi rimuoverli una volta completato il ciclo (idem per gli oggetti da aggiungere). Il problema e' pero che la modifica prende piede solo al ciclo successivo, mentre a me interesserebbe che l'oggetto eliminato (nel caso sia successivo a quello corrente) non venga esaminato nel ciclo corrente (idem per gli oggetti aggiunti, sarebbe bello venissero esaminati nello stesso ciclo in cui sono stati aggiunti.
-Potrei quindi inserire un campo nel mio oggetto che mi indica se e' stato eliminato e quindi controllare all'entrata del ciclo per saltare gli oggetti eliminati ( ma questo mi costringerebbe a fare un controllo agiuntivo, e nel caso non sia io a creare il ciclo la cosa sarebbe inpossibile)
Per ora sono arrivato qui a pensare. qualche suggerimento o idea?