Précédent   Forum des professionnels en informatique > Java > Général Java > Langage
Langage Forum d'entraide sur le langage Java et autres langages pour la JVM : syntaxe, POO, conventions, API standard. Avant de poster -> FAQ Java
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
Vieux 20/05/2008, 15h06   #1
Futur Membre du Club
 
Inscription : août 2004
Messages : 80
Détails du profil
Informations forums :
Inscription : août 2004
Messages : 80
Points : 15
Points : 15
Par défaut message erreur java.lang.IndexOutOfBoundsException

Bonjour,

je développe un programme qui extrait des enregistrements d'une base statistique et les insére dans une autre BD en utilisant une interface conçue en swing,

Mon PB est que parfois,je saisis un grand nombre et mon programme ne se termine pas ,je recois une erreur dont une erreur dont le début est :
*****************************************************
Code :
1
2
3
Exception in thread "AWT-EventQueue-0" java.lang.IndexOutOfBoundsException: Index: 60, Size: 60
at java.util.ArrayList.RangeCheck(ArrayList.java:547)
at java.util.ArrayList.get(ArrayList.java:322)
**********************************************


et m'indique l'endroit qui le génére :
listeComplementaire.add(listeEnglobante.get(k));
listeComplementaire.get(k).setNumeroWagon(numeroFictif);

Pourriez vous m'indiquer d'autres façons pour résoudre ce pb aussi pour factoriser le code qui se répéte dans ce programme et merci bcp d'avance.
et le programme est :

Code :
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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
private IDaoFactory daoFactory;
 
public ServerStatistiquesService(IDaoFactory daoFactory) {
this.daoFactory = daoFactory;
}
 
public List<IVoyage> ajouterVoyagesStatistiques(ILieu origine,
ILieu destination, String clientOrigine, String clientDestination,
Date debutPeriode, Date finPeriode, int nombreAPiocher)
throws ServiceException {
List<IVoyage> listVoyage = null;
List<IVoyage> listVoyageRedondants = null;
List<IVoyage> listVoyageRedondantsBis = null;
List<IVoyage> listVoyageRedondantsBisBis = null;
List<IVoyage> listVoyageRedondantsBisBisBis = null;
List<IVoyage> listeComplementaire = null;
List<IVoyage> listeEnglobante = null;
String numeroFictif;
try {
daoFactory.startTransaction();
listVoyage = new ArrayList<IVoyage>();
listVoyage = (ArrayList<IVoyage>) daoFactory.getVoyageDao()
.findVoyagesStatistiques(origine, destination,
clientOrigine, clientDestination, debutPeriode,
finPeriode, nombreAPiocher);
listeEnglobante = new ArrayList<IVoyage>();
if (listVoyage == null || listVoyage.size() == 0) {
return null;
} else {
for (int i = 0; i < (listVoyage.size()); i++) {
System.out.println("numero fictifs de première liste");
numeroFictif = daoFactory.getVoyageDao().getSeq(
"s_num_wagon");
System.out.println(numeroFictif);
listVoyage.get(i).setNumeroWagon(numeroFictif);
listVoyage.get(i).setEstPrevision(1);
listVoyage.get(i).setDateHeureDepart(new Date());
listeEnglobante.add(listVoyage.get(i));
daoFactory.getVoyageDao().insert(listVoyage.get(i));
}
System.out.println("listVoyage:" + listVoyage.size());
}
if (nombreAPiocher - listVoyage.size() > 0) {
System.out.println("deuxième itération");
listVoyageRedondants = new ArrayList<IVoyage>();
listVoyageRedondants = (ArrayList<IVoyage>) daoFactory
.getVoyageDao().findVoyagesStatistiques(origine,
destination, clientOrigine, clientDestination,
debutPeriode, finPeriode,
(nombreAPiocher - listVoyage.size()));
for (int i = 0; i < (listVoyageRedondants.size()); i++) {
System.out.println("numero fictifs de deuxième liste");
numeroFictif = daoFactory.getVoyageDao().getSeq(
"s_num_wagon");
System.out.println(numeroFictif);
listVoyageRedondants.get(i).setNumeroWagon(numeroFictif);
listVoyageRedondants.get(i).setEstPrevision(1);
listVoyageRedondants.get(i).setDateHeureDepart(new Date());
daoFactory.getVoyageDao().insert(
listVoyageRedondants.get(i));
}
listeEnglobante.addAll(listVoyageRedondants);
System.out.println("listVoyageRedondants:"
+ listVoyageRedondants.size());
}
if ((listVoyageRedondants != null)
&& (listVoyageRedondants.size()) != 0
&& (listVoyage != null)
&& (listVoyage.size()) != 0
&& ((nombreAPiocher - listVoyage.size() - listVoyageRedondants
.size()) > 0)) {
System.out.println("troisième itération");
listVoyageRedondantsBis = new ArrayList<IVoyage>();
listVoyageRedondantsBis = (ArrayList<IVoyage>) daoFactory
.getVoyageDao()
.findVoyagesStatistiques(
origine,
destination,
clientOrigine,
clientDestination,
debutPeriode,
finPeriode,
(nombreAPiocher - listVoyage.size() - listVoyageRedondants
.size()));
for (int i = 0; i < (listVoyageRedondantsBis.size()); i++) {
System.out.println("numero fictifs de troisième liste");
numeroFictif = daoFactory.getVoyageDao().getSeq(
"s_num_wagon");
System.out.println(numeroFictif);
listVoyageRedondantsBis.get(i).setNumeroWagon(numeroFictif);
listVoyageRedondantsBis.get(i).setEstPrevision(1);
listVoyageRedondantsBis.get(i).setDateHeureDepart(
new Date());
daoFactory.getVoyageDao().insert(
listVoyageRedondantsBis.get(i));
}
listeEnglobante.addAll(listVoyageRedondantsBis);
System.out.println("listVoyageRedondantsBis:"
+ listVoyageRedondantsBis.size());
}
if (listVoyageRedondantsBis != null
&& listVoyageRedondantsBis.size() != 0
&& listVoyageRedondants != null
&& listVoyageRedondants.size() != 0
&& ((nombreAPiocher - listVoyage.size()
- listVoyageRedondants.size() - listVoyageRedondantsBis
.size()) > 0)) {
System.out.println("quatrième itération");
listVoyageRedondantsBisBis = new ArrayList<IVoyage>();
listVoyageRedondantsBisBis = (ArrayList<IVoyage>) daoFactory
.getVoyageDao()
.findVoyagesStatistiques(
origine,
destination,
clientOrigine,
clientDestination,
debutPeriode,
finPeriode,
(nombreAPiocher - listVoyage.size()
- listVoyageRedondants.size() - listVoyageRedondantsBis
.size()));
for (int i = 0; i < (listVoyageRedondantsBisBis.size()); i++) {
System.out.println("numero fictifs de quarième liste");
numeroFictif = daoFactory.getVoyageDao().getSeq(
"s_num_wagon");
System.out.println(numeroFictif);
listVoyageRedondantsBisBis.get(i).setNumeroWagon(
numeroFictif);
listVoyageRedondantsBisBis.get(i).setEstPrevision(1);
listVoyageRedondantsBisBis.get(i).setDateHeureDepart(
new Date());
daoFactory.getVoyageDao().insert(
listVoyageRedondantsBisBis.get(i));
}
listeEnglobante.addAll(listVoyageRedondantsBisBis);
System.out.println("listVoyageRedondantsBisBis:"
+ listVoyageRedondantsBisBis.size());
}
if (listVoyageRedondantsBisBis != null
&& listVoyageRedondantsBisBis.size() != 0
&& listVoyageRedondantsBis != null
&& listVoyageRedondantsBis.size() != 0
&& ((nombreAPiocher - listVoyage.size()
- listVoyageRedondants.size()
- listVoyageRedondantsBis.size() - listVoyageRedondantsBisBis
.size()) > 0)) {
System.out.println("cinquième itération");
listVoyageRedondantsBisBisBis = new ArrayList<IVoyage>();
listVoyageRedondantsBisBisBis = (ArrayList<IVoyage>) daoFactory
.getVoyageDao()
.findVoyagesStatistiques(
origine,
destination,
clientOrigine,
clientDestination,
debutPeriode,
finPeriode,
(nombreAPiocher - listVoyage.size()
- listVoyageRedondants.size()
- listVoyageRedondantsBis.size() - listVoyageRedondantsBisBis
.size()));
for (int i = 0; i < (listVoyageRedondantsBisBisBis.size()); i++) {
System.out.println("numero fictifs de cinq liste");
numeroFictif = daoFactory.getVoyageDao().getSeq(
"s_num_wagon");
System.out.println(numeroFictif);
listVoyageRedondantsBisBisBis.get(i).setNumeroWagon(
numeroFictif);
listVoyageRedondantsBisBisBis.get(i).setEstPrevision(1);
listVoyageRedondantsBisBisBis.get(i).setDateHeureDepart(
new Date());
daoFactory.getVoyageDao().insert(
listVoyageRedondantsBisBisBis.get(i));
}
listeEnglobante.addAll(listVoyageRedondantsBisBisBis);
System.out.println("listVoyageRedondantsBisBisBis:"
+ listVoyageRedondantsBisBisBis.size());
 
}
 
if (listeEnglobante.size() < nombreAPiocher) {
System.out.println("listeEnglobante.size()_avant="
+ listeEnglobante.size());
System.out.println("Travail pas encore fini");
listeComplementaire = new ArrayList<IVoyage>();
int k = 0;
while (k < nombreAPiocher - listeEnglobante.size()&& (listeEnglobante != null) ) {
numeroFictif = daoFactory.getVoyageDao().getSeq(
"s_num_wagon");
listeComplementaire.add(listeEnglobante.get(k));
listeComplementaire.get(k).setNumeroWagon(numeroFictif);
daoFactory.getVoyageDao()
.insert(listeComplementaire.get(k));
k++;
}
listeEnglobante.addAll(listeComplementaire);
System.out.println("listeEnglobante.size()_après="
+ listeEnglobante.size());
}
 
daoFactory.commitTransaction();
} catch (DaoException e) {
throw new ServiceException(e);
} finally {
try {
daoFactory.endTransaction();
} catch (DaoException e) {
throw new ServiceException(e);
}
}
return ((listVoyage.size() == nombreAPiocher) ? listVoyage
: (listeEnglobante.size() == nombreAPiocher) ? listeEnglobante
: (listeComplementaire.size() != 0) ? listeEnglobante
: null);

Dernière modification par adiGuba ; 20/05/2008 à 15h15. Motif: Ajout des balises [code] - c'est plus lisible ;)
coquero est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/05/2008, 15h10   #2
Membre Expert
 
Avatar de CheryBen
 
Inscription : mai 2005
Messages : 1 592
Détails du profil
Informations personnelles :
Âge : 29

Informations forums :
Inscription : mai 2005
Messages : 1 592
Points : 1 628
Points : 1 628
Bonjour, c'est totalement illisible, merci d'éditer le post et de mettre la balise CODE (#).

Concernant l'erreur c'est parce que tu fais listeEnglobante.get(k) ou k vaut 60 et listeEnglobante a 60 éléments. Or en java on commence à compter à 0, donc les indices pour récupérer les 60 éléments doivent aller de 0 à 59.

Tu dois déclarer ton while de cette manière :
Code :
while (k <= nombreAPiocher - listeEnglobante.size()&& (listeEnglobante != null)
Il existe plusieurs façon de mieu parcourir une liste sans risque d'erreur.
Code :
1
2
3
4
5
6
7
8
for (Iterator iterator = list.iterator(); iterator.hasNext();) {
    Type objet = (Type) iterator.next();        
}
 
 
for (Type objet : list) {
 
}
__________________
Les composants SWING | Les layouts SWING | doc javase 6 | CORBA | XSLT | BDD Derby embarquée

Pensez au bouton une fois le problème résolu
Comment utiliser la fameuse balise CODE ?
CheryBen est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/05/2008, 15h11   #3
Modérateur
 
Avatar de dinobogan
 
Homme Dinobogan Shelashyn
ingénieur étude et développement
Inscription : juin 2007
Messages : 3 141
Détails du profil
Informations personnelles :
Nom : Homme Dinobogan Shelashyn
Âge : 30
Localisation : France

Informations professionnelles :
Activité : ingénieur étude et développement
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juin 2007
Messages : 3 141
Points : 4 622
Points : 4 622


IndexOutOfBoundsException signifie que l'index donné dans la méthode "get" dépasse la taille de la liste.
Par exemple, si ton ArrayList possède 3 élements, donc indicés de 0 à 2, tu fais un "get( 20 )" dessus. Le 20eme élément n'existe pas, l'indice dépasse la taille de la liste.
dinobogan est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +1. Il est actuellement 07h03.


 
 
 
 
Partenaires

Hébergement Web