Bonjour à tous,
Je bloque sur certain aspects de l'ArrayList,
J'aimerai trouver un moyen de modifier un ArrayList "en le parcourant".
J'ai eu une idée qui ne fonctionne pas et je ne sait pas pourquoi (enfin ca fonctionne mais ca m'affiche une erreur)
1-Je créé un ArrayList que j'appel x qui sera mon ArrayList a modifier.
2-Comme je ne peut pas modifier x en le parcourant je fait un autre ArrayList y = x;
3-Je parcours y et je modifie x c'est tout bête mais ca me donne ca:
Voila mon code:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 Exception in thread "AWT-EventQueue-0" java.util.ConcurrentModificationException at java.util.ArrayList$Itr.checkForComodification(ArrayList.java:859) at java.util.ArrayList$Itr.next(ArrayList.java:831) at version2.Acceuil.Display(Acceuil.java:62)
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43 public class Acceuil extends World{ public ArrayList<ArrayList> Bacterie = new ArrayList<ArrayList>(); public ArrayList<Bacterium> RedBacterie = new ArrayList<Bacterium>(); public ArrayList<Bacterium> BlueBacterie = new ArrayList<Bacterium>(); public ArrayList<Bacterium> GrayBacterie = new ArrayList<Bacterium>(); public ArrayList<Bacterium> OrangeBacterie = new ArrayList<Bacterium>(); public ArrayList<Bacterium> GreenBacterie = new ArrayList<Bacterium>(); public ArrayList<Bacterium> bacterie = new ArrayList<Bacterium>(); public Rectangle2D background = new Rectangle2D.Double(0, 0, Frame.panel.getScreenWidth(), Frame.panel.getScreenHeight()); public void Creation(){ Bacterie.add(RedBacterie); Bacterie.add(BlueBacterie); Bacterie.add(GrayBacterie); Bacterie.add(OrangeBacterie); Bacterie.add(GreenBacterie); } public void Display(){ Frame.panel.feuille.fill(background); Bacterium x;; bacterie = Bacterie.get(0); Iterator<Bacterium> it = bacterie.iterator(); while(it.hasNext()){ x = it.next(); ((Bacterium) Bacterie.get(0).get(bacterie.indexOf(x))).Move(); if(x.Reprod() && x.Speed != 0 && Bacterie.get(0).size() < 1000){ Bacterie.get(0).add(new Bacterium(x.posX+2, x.posY+2, x.color)); ((Bacterium) Bacterie.get(0).get(bacterie.size()-1)).Creation(); } if(x.Death()){ ((Bacterium) Bacterie.get(0).get(bacterie.indexOf(x))).Speed = 0; } ((Bacterium) Bacterie.get(0).get(bacterie.indexOf(x))).Display();//garder cette ligne avant remove if(x.Final()){ Bacterie.get(0).remove(bacterie.indexOf(x)); } }
Si je clic sur Acceuil.java:62, ca me renvoi àQuel est mon erreur, et comment arriver a mon but avec un code simple.
Code : Sélectionner tout - Visualiser dans une fenêtre à part x = it.next();
Merci de votre aide.
Partager