|
Publicité | ||||||||||||||||||||||
|
|
#1 (permalink) |
|
Nouveau membre du Club
![]() Date d'inscription: août 2004
Messages: 75
|
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 ;) |
|
|
|
|
|
#2 (permalink) |
|
Expert Confirmé
![]() Date d'inscription: mai 2005
Localisation: R.P.
Âge: 27
Messages: 1 586
|
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) Code :
for (Iterator iterator = list.iterator(); iterator.hasNext();) { Type objet = (Type) iterator.next(); } for (Type objet : list) { }
__________________
une fois le problème résolu |
|
|
|
|
|
#3 (permalink) |
![]() Date d'inscription: juin 2007
Messages: 2 439
|
![]() 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. |
|
|
|
|
|
![]() |
||
message erreur java.lang.IndexOutOfBoundsException
|
||
| Outils de la discussion | |
|
|