IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Collection et Stream Java Discussion :

Array List vide


Sujet :

Collection et Stream Java

  1. #1
    Membre du Club
    Inscrit en
    Août 2004
    Messages
    86
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 86
    Points : 44
    Points
    44
    Par défaut Array List vide
    Bonjour,

    je fais appel à une méthode getListeVoyages qui fait appel à deux autres méthodes :choixHasardDansListe & calculNbJourDisponibles.

    mais je reçois un msg d'erreur qui m'indique que la liste renvoyée par choixHasardDansListe est vide,j'ai débugé le prg mais j'ai pas trouvé la source du pb.Pourriez vous jeter un coup d'oeil sur les codes sources ci -dessous,merci d'avance.

    Cdt,


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    private Calendar choixHasardDansListe(ArrayList<Calendar> listeJours) {
    		listeJours = new ArrayList<Calendar>();
    		System.out.println("la taille de listeJours est:" + listeJours.size());
    		int position = (int) Math.floor(Math.random()) * listeJours.size();
    		System.out.println("la position est:" + position);
    		return (Calendar) listeJours.get(position).clone();
    	}

    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
     
    public ArrayList<ArrayList<Calendar>> calculNbJourDisponibles(Date dateMin,
    			Date dateMax) {
     
    		Calendar c = Calendar.getInstance();
    		c.setTime(dateMin);
    		ArrayList<ArrayList<Calendar>> listeJours = new ArrayList<ArrayList<Calendar>>();
    		listeJours.add(0, null);
    		for (int i = 1; i <= 7; i++) {
    			listeJours.add(i, new ArrayList<Calendar>());
    		}
     
    		while (c.getTime().before(dateMax)) {
    			listeJours.get(Calendar.DAY_OF_WEEK).add((Calendar) c.clone());
     
    			c.add(Calendar.DAY_OF_MONTH, 1);
    		}
    		return listeJours;
     
    	}
    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
    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
     
    public List<IVoyage> getListeVoyages(ILieu origine, ILieu destination,
    			String clientOrigine, String clientDestination,
    			Date debutPeriodeStat, Date finPeriodeStat, Date debutPeriodeOper,
    			Date finPeriodeOper, int nombre) throws ServiceException {
     
    		List<IVoyage> listeRecursive = null;
    		String numeroFictif = "";
     
    		if (nombre > 0) {
     
    			ArrayList<ArrayList<Calendar>> listeCompleteJours = calculNbJourDisponibles(
    					debutPeriodeOper, finPeriodeOper);
    			System.out.println("debutPeriodeOper est :" + debutPeriodeOper);
    			System.out.println("finPeriodeOper est :" + finPeriodeOper);
    			System.out.println("la taille de la liste listeCompleteJours : "
    					+ listeCompleteJours.size());
     
    			if (listeCompleteJours.size() != 0 && listeCompleteJours != null) {
    				for (int k = 0; k < listeCompleteJours.size(); k++) {
    					System.out.println("" + listeCompleteJours.get(k));
     
    				}
    			}
    			try {
    				listeRecursive = (ArrayList<IVoyage>) daoFactory.getVoyageDao()
    						.findVoyagesStatistiques(origine, destination,
    								clientOrigine, clientDestination,
    								debutPeriodeStat, finPeriodeStat, nombre);
    				System.out.println("ma liste:" + listeRecursive);
    				if (listeRecursive.size() != nombre)
    					listeRecursive.addAll((ArrayList<IVoyage>) daoFactory
    							.getVoyageDao().findVoyagesStatistiques(origine,
    									destination, clientOrigine,
    									clientDestination, debutPeriodeStat,
    									finPeriodeStat,
    									nombre - listeRecursive.size()));
     
    				for (IVoyage objetVoyage : listeRecursive) {
    					Calendar jourStat = Calendar.getInstance();
    					jourStat.setTime(objetVoyage.getDateHeureDepart());
    					System.out.println("la positionde listeJours:"
    							+ jourStat.get(Calendar.DAY_OF_WEEK));
    					ArrayList<Calendar> listeJours = listeCompleteJours
    							.get(jourStat.get(Calendar.DAY_OF_WEEK));
    					if (listeJours.isEmpty()) {
    						// ERREUR
    					}
    					Calendar jourOper = choixHasardDansListe(listeJours);
    					jourOper.set(Calendar.HOUR, jourStat.get(Calendar.HOUR));
    					jourOper
    							.set(Calendar.MINUTE, jourStat.get(Calendar.MINUTE));
    					jourOper
    							.set(Calendar.SECOND, jourStat.get(Calendar.SECOND));
     
    					if (objetVoyage != null) {
    						numeroFictif = daoFactory.getVoyageDao().getSeq(
    								"s_num_wagon");
    						System.out.println(numeroFictif);
    						objetVoyage.setNumeroWagon(numeroFictif);
    						objetVoyage.setEstPrevision(1);
    						objetVoyage.setEstAnnule(0);
    						objetVoyage.setDateHeureDepart(jourOper.getTime());
    						daoFactory.getVoyageDao().insertTest(objetVoyage);
    						System.out.println("ce voyage vient d'être inséré:"
    								+ objetVoyage.getIdVoyage());
     
    					}
    				}
    			} catch (DaoException e) {
    				throw new ServiceException(e);
    			}
    		}
    		return listeRecursive;
    	}
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Exception in thread "AWT-EventQueue-0" java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
    	at java.util.ArrayList.RangeCheck(ArrayList.java:547)
    	at java.util.ArrayList.get(ArrayList.java:322)
     
    la ligne ou il y'a pb :return (Calendar) listeJours.get(position).clone();

  2. #2
    Membre éclairé Avatar de zorm
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    584
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 584
    Points : 672
    Points
    672
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int position = (int) Math.floor(Math.random()) * listeJours.size();
    Ton floor() est mal positionné. Il serait plus logique de faire.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int position = (int) Math.floor(Math.random() * listeJours.size());
    Pourquoi tu fais ca en début de méthode ???
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    listeJours = new ArrayList<Calendar>();

  3. #3
    Membre du Club
    Inscrit en
    Août 2004
    Messages
    86
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 86
    Points : 44
    Points
    44
    Par défaut test
    merci,j'ai essayé la ligne que vous m'avez passé mais ça n'a pas marche car

    la liste listeJours est vide et dés coup j'ai eu:


    la positionde listeJours:4
    la taille de listeJours est:0
    la position est:-1

  4. #4
    Membre éprouvé
    Profil pro
    Développeur Back-End
    Inscrit en
    Avril 2003
    Messages
    782
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Back-End

    Informations forums :
    Inscription : Avril 2003
    Messages : 782
    Points : 935
    Points
    935
    Par défaut
    Bonjour,

    listeJours est une variable de classe ?
    car dans la methode calculNbJourDisponibles il y a :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ArrayList<ArrayList<Calendar>> listeJours = new ArrayList<ArrayList<Calendar>>();

  5. #5
    Membre éclairé Avatar de zorm
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    584
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 584
    Points : 672
    Points
    672
    Par défaut
    Citation Envoyé par coquero Voir le message
    la liste listeJours est vide
    Normal, en début de ta méthode tu fais ca:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    listeJours = new ArrayList<Calendar>();
    Au fait, j'ai édité mon premier message, laisse tomber le size() - 1 car j'avais zappé que le floor arrondissait par la valeur inférieur donc même si tu as 51.99, tu obtiendras 51.0

  6. #6
    Membre du Club
    Inscrit en
    Août 2004
    Messages
    86
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 86
    Points : 44
    Points
    44
    Par défaut changement code
    j'ai fait les chgts demandés en déclarant la variable de classe listeJours mais le pb persiste
    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
     
    public ArrayList<ArrayList<Calendar>> calculNbJourDisponibles(Date dateMin,
    			Date dateMax) {
     
    		Calendar c = Calendar.getInstance();
    		c.setTime(dateMin);		
    		listeJours.add(0, null);
    		for (int i = 1; i <= 7; i++) {
    			listeJours.add(i, new ArrayList<Calendar>());
    		}
     
    		while (c.getTime().before(dateMax)) {
    			listeJours.get(Calendar.DAY_OF_WEEK).add((Calendar) c.clone());
     
    			c.add(Calendar.DAY_OF_MONTH, 1);
    		}
    		return listeJours;
     
    	}
     
     
    private Calendar choixHasardDansListe(ArrayList<Calendar> listeJours) {
     
    		int position = (int) Math.floor(Math.random() * (listeJours.size()));
    		System.out.println("la position est:" + position);
    		return (Calendar) listeJours.get(position).clone();
    	}

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Test Zone de liste vide
    Par julio02200 dans le forum Access
    Réponses: 8
    Dernier message: 06/06/2006, 14h58
  2. [VBA-A]Pb av les zones de listes "vides"
    Par eultartuffe dans le forum VBA Access
    Réponses: 2
    Dernier message: 31/05/2006, 11h12
  3. zone de liste vide et message
    Par fscli dans le forum Access
    Réponses: 7
    Dernier message: 18/05/2006, 10h07
  4. [VB.net] Join d'un Array list de string?
    Par the_bmo dans le forum VB.NET
    Réponses: 8
    Dernier message: 15/12/2005, 13h53
  5. Vertex Array & Listes d'Affichage ...
    Par yagero dans le forum OpenGL
    Réponses: 3
    Dernier message: 18/09/2005, 18h32

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo