Précédent   Forum des professionnels en informatique > Java > Général Java > Langage
Langage Langage Java, syntaxe, POO, conventions . 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 (permalink)
Nouveau membre du Club
 
Date d'inscription: août 2004
Messages: 75
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 :
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 :
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
Vieux 20/05/2008, 15h10   #2 (permalink)
Expert Confirmé
 
Avatar de CheryBen
 
Date d'inscription: mai 2005
Localisation: R.P.
Âge: 27
Messages: 1 586
Par défaut

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 :
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 ?
Détente : besoin d'une fine lame?
CheryBen est déconnecté   Envoyer un message privé Réponse avec citation
Vieux 20/05/2008, 15h11   #3 (permalink)
Modérateur
 
Avatar de dinobogan
 
Date d'inscription: juin 2007
Messages: 2 439
Par défaut



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
NEWS JAVAFAQs JAVATUTORIELS JAVAJAVASEARCHSOURCESLIVRESOUTILS, EDI & APIBLOGDISCUSSIONSTV

Réponse Proposer ce sujet en actualité

Précédent   Forum des professionnels en informatique > Java > Général Java > Langage



Outils de la discussion

Règles de messages
Vous ne pouvez pas créer de nouvelles discussions
Vous ne pouvez pas envoyer des réponses
Vous ne pouvez pas envoyer des pièces jointes
Vous ne pouvez pas modifier vos messages

Les balises BB sont activées : oui
Les smileys sont activés : oui
La balise [IMG] est activée : oui
Le code HTML peut être employé : non
Trackbacks are non
Pingbacks are non
Refbacks are non



Fuseau horaire GMT +1. Il est actuellement 16h24.


Vos questions techniques : forum d'entraide Java - Publiez vos articles, tutoriels et cours
et rejoignez-nous dans l'équipe de rédaction du club d'entraide des développeurs francophones
Nous contacter - Hébergement - Participez - Copyright © 2000-2010 www.developpez.com - Legal informations.