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 :

[Arraylist] Manipulation boucle


Sujet :

Collection et Stream Java

  1. #1
    Membre éclairé Avatar de Katachana
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    755
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Avril 2007
    Messages : 755
    Par défaut [Arraylist] Manipulation boucle
    Bonjour , je souhaite avoir un avis sur la justesse de mon utilisation

    Voila :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
      for(int j = 0;j<echelleTps.size()-1;j++)
    			   {.........
     echelleDispo.add(j,compteur);
    			   }

    je cherche à obtenir dans ma seconde arraylist la meme répartition que dans la premiere (le meme nombre d'élément).
    Et je voudrais savoir si "ADD" ajoutera bien à chaque fois une valeur à celle deja stocké ou s'il ecrase celle stockée.


    Merci

  2. #2
    Membre expérimenté
    Inscrit en
    Janvier 2006
    Messages
    257
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 257
    Par défaut
    Tu cherche a cloner ta liste ???

    parceque si c ce que tu cherche a fire tu peux faire un truc du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ArrayList a2 = new ArrayList(a1);

  3. #3
    Membre chevronné

    Profil pro
    Inscrit en
    Mars 2007
    Messages
    392
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 392
    Par défaut
    La javadoc ArrayList précise :
    public void add(int index, Object element)

    Inserts the specified element at the specified position in this list. Shifts the element currently at that position (if any) and any subsequent elements to the right (adds one to their indices).

    donc la taille de echelleDispo va augmenter....
    Il vaut mieux utiliser la méthode "set(int, Object)" :
    set

    public Object set(int index, Object element)

    Replaces the element at the specified position in this list with the specified element.

    Attention : l'indice ne doit pas être > au nbre d'éléments dans la List sinon tu auras un "IndexOutOfBoundsException - if index out of range (index < 0 || index >= size())."

  4. #4
    Membre éclairé Avatar de Katachana
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    755
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Avril 2007
    Messages : 755
    Par défaut
    non en fait echelleTPS contient des dates, et je veux stocké dans echelleDispo des nombres qui doivent correspondre a la meme place que les dates :


    echelleTps : 05/12 10/12 .......................................... 02/03

    echelleDispo : 3 5 ......................................... 4

  5. #5
    Membre éclairé Avatar de Katachana
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    755
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Avril 2007
    Messages : 755
    Par défaut
    non en fait echelleTPS contient des dates, et je veux stocké dans echelleDispo des nombres qui doivent correspondre a la meme place que les dates :


    echelleTps : 05/12.........10/12 .......................................... 02/03

    echelleDispo : 3..................5......................................... 4

  6. #6
    Membre expérimenté
    Inscrit en
    Janvier 2006
    Messages
    257
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 257
    Par défaut
    a oki alors sans vouloir faire la rabatJoi pourkoi tu stock pas un objet dans ton arrayList qui contient les date et les nombre associer au date... apres tu n'a qu'une liste a gerer au lieu de 2...

  7. #7
    Membre émérite Avatar de remika
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    806
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 806
    Par défaut
    pourquoi pas une Map d'ailleurs ?

  8. #8
    Membre éclairé Avatar de Katachana
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    755
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Avril 2007
    Messages : 755
    Par défaut
    en fait c'est pour le traitement qui suit que je fais ca comme ca.


    Merci mattheox pour tes explication, mais si je comprend bien set va ecraser l'ancienne valeur non ?

  9. #9
    Membre éclairé Avatar de Katachana
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    755
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Avril 2007
    Messages : 755
    Par défaut
    c'est bien ca mon probleme , en utilisant add ou set, les valeurs ne s'ajoutent pas au fur et mesure..... elle se réinitialise a chaque fois à 0

    quelqu'un aurait une piste?

  10. #10
    Membre éclairé Avatar de Katachana
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    755
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Avril 2007
    Messages : 755
    Par défaut
    Quelqu'un aurait une p'tite idée sur la facon ou la structure que je dois utiliser afin de pouvoir disposer de la possibilité d'ajouter un nombre à celui déja présent dans l'Arraylist (si le choix se porte sur l'utilisation d'une Arraylist).


    Merci beaucoup !!!


    en essayant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echelleDispo.set(j,+compteur);
    Je me retrouve ave des erreurs, pourtant j'ai défini la taille de l'arraylist egale a celle de la premiere :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ArrayList<Integer> echelleDispo = new ArrayList<Integer>(echelleTps.size());

  11. #11
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    132
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2007
    Messages : 132
    Par défaut
    Si on suppose que echelleDispo.est un: ArrayList<Integer>

    Et si on suppose echelleDispo et echelleTps ont toujours le même nombre d'elements pour incrementer un element :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    void incrementCompteur (int index, int increment){
    Integer compteur = echelleDispo.get(index);
    echelleDispo.set(i, compteur+increment);
    }
    Si tu veux ajouter la même valeur à tous les elements du ton tableau
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    void incrementCompteurs (int increment){
    for (int i=0;i<echelleDispo.length();i++){
     incrementCompteur (i, increment);
    }
    }
    en espérant que ça aidera.

  12. #12
    Membre chevronné Avatar de Rayndell
    Étudiant
    Inscrit en
    Mai 2007
    Messages
    289
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2007
    Messages : 289
    Par défaut
    Si tu veux absolument associer une date à un nombre précis, l'idéal est d'utiliser HashMap : pas besoin de créer 2 ArrayList, et la correspondance se fait directement au lieu d'aller rechercher les index. Par contre, HashMap interdit l'utilisation de deux mêmes index. Si tu n'as pas ce problème (c'est-à-dire si chaque nombre doit être unique, ou chaque date fait comme tu veux) utilise HashMap comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    HashMap<Integer, Date> hm = new HashMap<Integer, Date>();
     
    hm.add(j, date);

  13. #13
    Membre éclairé Avatar de Katachana
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    755
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Avril 2007
    Messages : 755
    Par défaut
    J'ai encore un p'tit souci, je ne comprend pas pourquoi l'arraylist<integer> echelleDispo fa une taille de ehcelleTps.size() *2 .

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.out.println("boucle : "+j+" taille : "+echelleDispo.size());
    me donne pour j => de 0 a 120 et pour echelleDispo.size() => de 0 à 240


    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
    		for(i=0;i<gap;i++)
        	{			
    		  debut.add(GregorianCalendar.DATE,+1);
    		  // System.out.println("DEbut :   "+debut.get(Calendar.DATE)+"/"+debut.get(Calendar.MONTH)+"/"+debut.get(Calendar.YEAR));		
    			   for(int j = 0;j<echelleTps.size()-1;j++)
    			   {
    				   compteur=0;
    				   retour=0;
    				   String val1=  echelleTps.get(j);
    				   String val2=  echelleTps.get(j+1);
    				   GregorianCalendar Val1=parseDate3(val1);				   
    				   GregorianCalendar Val2=parseDate3(val2);
    				   if ( (debut.after(Val1)) && (debut.before(Val2)) && (debut.get(Calendar.DAY_OF_WEEK)!=7 || debut.get(Calendar.DAY_OF_WEEK) !=1) ) {
    						compteur=compteur+1;
    						}
     
    				   retour=retour+compteur;			  		
    				   echelleDispo.add(j,retour); 
    				   System.out.println("boucle : "+j+" taille : "+echelleDispo.size());
    			   }
    			   }
    		return echelleDispo;

  14. #14
    Membre chevronné Avatar de Rayndell
    Étudiant
    Inscrit en
    Mai 2007
    Messages
    289
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2007
    Messages : 289
    Par défaut
    Je ne sais pas si tu as remarqué que la boucle for incrémentant j est dans une autre boucle for... i va de 0 à gap, et si gap = 1 alors il y aura deux tours de boucle ou tu feras varier j de 0 à 120... Donc 240 éléments dans ta liste...

  15. #15
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    132
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2007
    Messages : 132
    Par défaut
    c'est parce que tu fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echelleDispo.add(j,retour);

  16. #16
    Membre éclairé Avatar de Katachana
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    755
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Avril 2007
    Messages : 755
    Par défaut
    oui mais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echelleDispo.add(j,retour);
    est dans la boucle for (j), qui s'incrémente de 0 à 120 . Et meme si gap=10 je pensais qu'a chaque fois le j ferait pointé dans l'arraylist entre 0 et 120 non ?
    Ce qui me ramene a mon probleme initiale , comment faire pour que les valeurs soit ajouté a chaque fois aux valeurs deja contenu dans echelleDispo ?



    J allant de 0 à 120 , ca ne va pas entrainer que echelleDispo.add(j,retour); pointe entre 0 et 120 ?




    si je fais ca :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    				   retour=retour+compteur;
    				   int temp = echelleDispo.get(j);
    				   echelleDispo.set(j,temp+retour);
    J'ai des erreurs : Caused by: java.lang.IndexOutOfBoundsException: Index: 0, Size: 0



    Pourtant lors de l'instanciation de echelleDispo, je les défini égale a la taille de echelleTps........

  17. #17
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    132
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2007
    Messages : 132
    Par défaut
    La problème vient du fait que lorsque tu fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ArrayList<Integer> echelleDispo = new ArrayList<Integer>(echelleTps.size());
    tu initializes la

  18. #18
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    132
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2007
    Messages : 132
    Par défaut
    le problème vient du fait que lorsque tu fais :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ArrayList<Integer> echelleDispo = new ArrayList<Integer>(echelleTps.size());
    tu initialises la capacité initiale de ta liste mais pasles elements dans ta liste.
    Il y a 0 elements dans ta liste.

    Hors pour la fonction ArrayList.set(i,value) il faut i< nombre d'elements dans la liste.

    Pour palier le problème il faut initiliaser tous les elements dans echelleDispo pour exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
        Integer initialValue = new Integer(0);
        for (int i=0;i<echelleTps.size();i++){
            echelleDispo.add(initialValue);
        }

  19. #19
    Membre éclairé Avatar de Katachana
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    755
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Avril 2007
    Messages : 755
    Par défaut
    Voila ce que j'ai fait , mais j'ai toujours des problemes.....



    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
    	public ArrayList<Integer> dispoRes(String res,String jjmmaaaa2,String rate, String jjmmaaaa1) throws ParseException {
    		GregorianCalendar debut = parseDate2(jjmmaaaa1);
    		GregorianCalendar fin = parseDate2(jjmmaaaa2);
    		debut.add(GregorianCalendar.DATE,-1);
    		ArrayList<Integer> echelleDispo = new ArrayList<Integer>(echelleTps.size());
    		 System.out.println(" ressource :   "+res);
    		   for(int j = 0;j<echelleTps.size()-1;j++)
    		   {
    			   echelleDispo.add(j,0);
    		   }
    		int gap= (int) ((fin.getTimeInMillis() - debut.getTimeInMillis() )*( (1E-3/(60*60*24) )));
     
    		for(i=0;i<gap;i++)
     
        	{			
    		  debut.add(GregorianCalendar.DATE,+1);
    		  // System.out.println("DEbut :   "+debut.get(Calendar.DATE)+"/"+debut.get(Calendar.MONTH)+"/"+debut.get(Calendar.YEAR));		
    			   for(int j = 0;j<echelleTps.size()-1;j++)
    			   {
    				   compteur=0;
    				   int retour=0;
    				   String val1=  echelleTps.get(j);
    				   String val2=  echelleTps.get(j+1);
    				   GregorianCalendar Val1=parseDate3(val1);				   
    				   GregorianCalendar Val2=parseDate3(val2);
    				   if (debut.after(Val1) && debut.before(Val2)){
    					   if((debut.get(Calendar.DAY_OF_WEEK)!=Calendar.SATURDAY || debut.get(Calendar.DAY_OF_WEEK) !=Calendar.SUNDAY) ) {
     
    						compteur=compteur+1;
     
    						}	}			   
    				   retour=retour+compteur;				  
    				 int temp = echelleDispo.get(j);
    				 int Temp=temp+retour;
    				 System.out.println("iterateur : "+j+" Valeur : "+Temp);
    				   echelleDispo.set(j,Temp);				   
     
    			   }
    			   }
    		return (echelleDispo);			
    	}

    Je n'ai vraiment pas d'inspiration ou d'angles d'approches différentes, si quelqu'un a une idée je suis plus que preneur !!!

    Rappel : Deux Arraylists : echelleTps qui contient une durée divisé en semaine
    echelleDispo qui devrait contenir le nombre de jour de disponibilité....

    En fait j'ai en entrée une date de deb et de fin pour une tâche, je calcul l'ecart et compare chaque jour de cet intervalle avec echelleTps pour savoir dans quelle semaine je dois enlever des jours.

  20. #20
    Membre éclairé Avatar de Katachana
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    755
    Détails du profil
    Informations personnelles :
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Avril 2007
    Messages : 755
    Par défaut
    Merci elmor, j'avais pas vu que tu as répondu.

    J'ai deja mis en place un boucle pour l'initialisation , mais il y a encore un probleme avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     echelleDispo.set(j,Temp);
    j'ai fait des test pour controler ce qu'il y a dans Temp (sait on jamais.....) , il y a bien des valeurs , mais celles ci ne s'enregistre pas dans l'arraylist....

Discussions similaires

  1. JSTL : traitement de deux arrayList avec boucle c:forEach
    Par kerido dans le forum Servlets/JSP
    Réponses: 6
    Dernier message: 07/02/2014, 22h53
  2. arraylist vba, boucles imbriquées
    Par julio44 dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 20/07/2011, 09h49
  3. manipuler une table dans une boucle.
    Par DonQuiShoote dans le forum Access
    Réponses: 13
    Dernier message: 28/02/2007, 08h05
  4. Manipulation d'une arraylist
    Par timbrochier dans le forum Collection et Stream
    Réponses: 9
    Dernier message: 13/10/2006, 16h41
  5. [VB.net 2005] Boucle et ArrayList
    Par collaud_vb dans le forum Windows Forms
    Réponses: 15
    Dernier message: 27/09/2006, 10h44

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