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 :

Parcours tableau et changement de valeur


Sujet :

Collection et Stream Java

  1. #1
    Membre éclairé Avatar de mouss4rs
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    884
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 884
    Par défaut Parcours tableau et changement de valeur
    Bonjour,

    Lorsque je parcours un tableau, j'aimerais faire ce qui est en rouge dans ma boucle:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    for (int d = 0; d < tabPrenomP.length; d++) {
    
        if (tabPrenomP[0][d] != null ){
            // Cellule non null
            
            // Afficher l'agent + la validation
            System.out.println("Semaine: " + semaineP[1][d] + "Prénom: " + tabPrenomP[0][d]);
    
            // Si la valeur semaineP[1][d] change alors{
                //compter 1 fois;
            //}
        }
    }
    Quelqu'un saurait-il m'expliquer comment faire ?

    Merci d'avance pour votre aide.

  2. #2
    Membre expérimenté Avatar de fastdeath124
    Homme Profil pro
    Ingénieur sécurité
    Inscrit en
    Août 2011
    Messages
    117
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Ingénieur sécurité

    Informations forums :
    Inscription : Août 2011
    Messages : 117
    Par défaut
    Tu veux savoir si la valeur change depuis la dernière consultation?
    Si oui, il faut garder une copie de "semaineP" dans laquelle tu mets les anciennes valeurs et après chaque consultation tu copies la nouvelle valeur dans l'ancienne.

  3. #3
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 592
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 592
    Par défaut
    De toute façon, avec le code qui nous est montré, sa valeur ne change pas, point barre.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  4. #4
    Membre éclairé Avatar de mouss4rs
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    884
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 884
    Par défaut
    Si, ma semaine change selon l'agent.
    En faite, je récupère de plusieurs onglet excel les prenoms et la semaine.

    Voici l'affichage:
    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
     
    Semaine: 1Prénom: CAMILLE
    Semaine: 1Prénom: MURIELLE
    Semaine: 1Prénom: ISABELLE
    Semaine: 1Prénom: OPHÉLIE
    Semaine: 1Prénom: LAURA
    Semaine: 1Prénom: ASSMA
    Semaine: 2Prénom: CAMILLE
    Semaine: 2Prénom: MURIELLE
    Semaine: 2Prénom: ASSMA
    Semaine: 2Prénom: YOANN
    Semaine: 2Prénom: ADELINE
    Semaine: 3Prénom: YVANE
    Semaine: 3Prénom: MURIELLE
    Semaine: 3Prénom: ISABELLE
    Semaine: 3Prénom: OPHÉLIE
    Semaine: 3Prénom: PAULE
    Semaine: 3Prénom: YOANN
    Semaine: 3Prénom: ADELINE
    Semaine: 4Prénom: YVANE
    Semaine: 4Prénom: VALÉRIE
    Semaine: 4Prénom: MURIELLE
    Semaine: 4Prénom: ISABELLE
    Semaine: 4Prénom: OPHÉLIE
    Semaine: 4Prénom: LAURA
    Semaine: 4Prénom: PAULE
    Semaine: 4Prénom: YOANN
    Semaine: 4Prénom: ADELINE

  5. #5
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2008
    Messages
    1 190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Septembre 2008
    Messages : 1 190
    Par défaut
    Il faut que tu stockes dans une base les différents tableau par semaine, et que tu compare donc avec ta dernière entrée. Quand je dis base, ça peut juste être les fichiers de tes tableau hein, je parles pas forcément d'une base oracle par exemple.

  6. #6
    Membre éclairé Avatar de mouss4rs
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    884
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 884
    Par défaut
    J'ai trouvé en me casant la tête toute une journée.
    avec un repet: for...
    et un break repet quand je trouve:
    Voilà:
    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
     
    System.out.println("");
    		    System.out.println("*******************SEMAINE 1*********************");
    		    int nbPrenomsP = Projection.length;
    		    int nbPrenomsQ = Quimper.length;
     
    		    //pour ecrire chaque heure pour chaque agent dans le fichier Quimper
    		    System.out.println("Quimper |  Projection");
    		    for (int y=0; y<nbPrenomsQ; y++){//pour chaque prénom de Quimper
    		    	if(Quimper[0][y]!=null){
    		    		int z, f=0;
    		    		repet :for(z = 0; z<nbPrenomsP; z++){//et pour chaque prenom du fichier Projection
    		    			if(Projection[0][z]!=null){
    		    				if(semaineP[1][f]==1){// si la semaine de l'agent en cours trouvée est = 1
    		    					//System.out.println("semaineP après le if"+semaineP[1][f]);
    		    					System.out.println(Quimper[0][y]+y+"   =   "+Projection[0][z]+z);
    		    					if(Quimper[0][y].equals(Projection[0][z])){//si le prénom du 1er fichier = prénom du 2ème fichier
    		    						//écrire ds "Quimper2_AS_OE_2012.xlsx", les heure de "Projection"/onglet dans les bonnes colonnes
    		    						row2 = sheet2.getRow(Integer.parseInt(Quimper[1][y]));// écrire à la ligne de l'agent
    		    						cell2 = row2.createCell(2);//on l'écrit à la colonne 2 (semaine 51)
    		    						cell2.setCellValue(tabheures[1][z]/24.0);
    		    						cellStyle = wb2.createCellStyle();
    		    						cellStyle.setDataFormat(fmt.getFormat("hh:MM"));
    		    						cell2.setCellStyle(cellStyle);
    		    						System.out.println("SEMAINE 1: "+Quimper[0][y]+y+"   =   "+Projection[0][z]+z+"a fait: "+tabheures[1][z]);
    		    						System.out.println("on écrit l'heure trouvée à la ligne"+Quimper[1][y]);
    		    						z=0;//POUR RETESTER LES AGENT DE LA SEMAINE 1
    		    						break repet;
    		    					}
    		    				}
    		    			}
    		    			// si la semaine de l'agent en cours trouvée n'est pas = 1: on passe au prénom suivant de Quimper
    		    			f++;
    		    		}//2eme for
    		    		z=0;
    		    	}//1er if
    		    }//2ème for
    		    System.out.println("*******************SEMAINE 4*********************");
    		    System.out.println("Quimper |  Projection");
    		    for (int y=0; y<nbPrenomsQ; y++){//pour chaque prénom de Quimper
    		    	if(Quimper[0][y]!=null){
    		    		int z, f=0;
    		    		repet :for(z = 0; z<nbPrenomsP; z++){//et pour chaque prenom du fichier Projection
    		    			if(Projection[0][z]!=null){
    		    				if(semaineP[1][f]==4){// si la semaine de l'agent en cours trouvée est = 1
    		    					//System.out.println("semaineP après le if"+semaineP[1][f]);
    		    					System.out.println(Quimper[0][y]+y+"   =   "+Projection[0][z]+z);
    		    					if(Quimper[0][y].equals(Projection[0][z])){//si le prénom du 1er fichier = prénom du 2ème fichier
    		    						//
    		    						System.out.println("SEMAINE 4: "+Quimper[0][y]+y+"   =   "+Projection[0][z]+z+"a fait: "+tabheures[1][z]);
    		    						z=0;//POUR RETESTER LES AGENT DE LA SEMAINE 1
    		    						break repet;
    		    					}
    		    				}
    		    			}
    		    			// si la semaine de l'agent en cours trouvée n'est pas = 1: on passe au prénom suivant de Quimper
    		    			f++;
    		    		}//2eme for
    		    		z=0;
    		    	}//1er if
    		    }//2ème for
    L'inconvénient c'est que ce n'est pas vraiment statique.

    Je dois faire ceci pour les 52 semaines de l'année espérons que ca va pas me faire un out of memory!

    Si quelqu'un a mieux, je suis preneur...

  7. #7
    Membre émérite
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    445
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 445
    Par défaut
    A mon avis, si ton code fonctionne, c'est une question de chance...

    Comme tu as des prenoms dans deux tableaux differents à des index différents, si j'étais toi, je commencerai par me faire un tableau de correspondance :

    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
    int[] tableauDeCorrespondances=new int[Projection[0].length]; 
     
        for (int y=0; y<Projection[0].length; y++){
          tableauDeCorrespondances[y]=-1;//non valide par defaut
          if(Projection[0][y]==null) {
            continue;
          }
          for(int z = 0; z<Quimper[0].length; z++){
            if(Quimper[0][z]==null) {
              continue;
            }
            if(Projection[0][y].equals(Quimper[0][z])){//si le prénom du 1er fichier = prénom du 2ème fichier
              tableauDeCorrespondances[y]=z;
              break;
            }
          }
        }
    Ensuite, le fait d'utiliser ce tableau simplifie/optimise vraiment le code :

    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
     
        for (int y=0; y<tableauDeCorrespondances.length; y++){
          int z =tableauDeCorrespondances[y];
          if(z==-1) {
            // Index invalide      
            continue;
          }
     
     
          // Tu as ton y et ton z pour faire plus facilement tes traitements :
     
          for(int nbSemaine:semaineP[1]) {
            if(nbSemaine==1) {
     
              System.out.println(Quimper[0][y] + y );
              //écrire ds "Quimper2_AS_OE_2012.xlsx", les heure de "Projection"/onglet dans les bonnes colonnes
              row2 = sheet2.getRow(Integer.parseInt(Quimper[1][y]));// écrire à la ligne de l'agent
              cell2 = row2.createCell(2);//on l'écrit à la colonne 2 (semaine 51)
              cell2.setCellValue(tabheures[1][z] / 24.0);
              cellStyle = wb2.createCellStyle();
              cellStyle.setDataFormat(fmt.getFormat("hh:MM"));
              cell2.setCellStyle(cellStyle);
              System.out.println("SEMAINE 1: " + Quimper[0][y] + y +  "a fait: " + tabheures[1][z]);
              System.out.println("on écrit l'heure trouvée à la ligne" + Quimper[1][y]);          
     
              break;
            }
     
        }
    Je ne comprends pas comment le nombre d'heures peut être correct vu qu'il n'y a pas de lien entre semaineP et tabheures

  8. #8
    Membre éclairé Avatar de mouss4rs
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    884
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 884
    Par défaut
    Je fais cette moulinette avant:
    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
     
    //Récupère par semaine: nom_agent +heures
    		int k = 0;//pour passer à la colonne suivante
    		for (Agent agt : listAgent){
    			if(agt.getAgent()!=null){//si l'agent n'est pas null
    				ag=agt.getAgent().toUpperCase();//obtenir l'agent en Majuscule
    				semaineDsAnnee=agt.getSemaineDsAnnee();
    				Projection[0][k]=ag; //récupération du prénom en Majuscule
    				semaineP[1][k]=semaineDsAnnee;
    			}
    			if(agt.getHeures()!=0){//si la validation n'est pas null
    				heures=agt.getHeures();//obtenir son heure effectué cette semaine
    				tabheures[1][k]=heures;//assigner les 2 valeurs trouvées
    				k++;//passe à la colonne suivante
    			}
    		}

  9. #9
    Membre émérite
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    445
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 445
    Par défaut
    semaineP et tabheures étant liés, je ne comprends pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if(semaineP[1][f]==1){
     ...
      tabheures[1][z]
    ...
    Tu te retrouves avec deux indices f et z potentiellement différents.

  10. #10
    Membre éclairé Avatar de mouss4rs
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    884
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 884
    Par défaut
    Oui, z c'est pour reboucler le prénom.
    et f pour passer à la prochaine semaine.

    Je pense que la meilleure idée était de séparé le programme en 3 partie avec une couche base de donnée.

    Seulement, je n'ai pas les droits d'accès à cette base de donnée ou je fais l'extract.

    On m'a conseillé Buisiness Inteligence de Microsoft qui permet de générer des rapport de différentes applications plutot que d'alimenter un fichier excel.

    Seulement, je n'ai pas de formation spécifiques là-dessus.

Discussions similaires

  1. changement une valeur dans un tableau par un autre
    Par nisrinege dans le forum MATLAB
    Réponses: 2
    Dernier message: 21/08/2014, 10h00
  2. Tableau avec changement spontané des valeurs
    Par Hobbèse dans le forum Débuter
    Réponses: 4
    Dernier message: 01/02/2014, 12h37
  3. [MySQL] Parcours tableau php et prise en compte changement pour insertion BDD
    Par Florian_mbf dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 10/05/2013, 13h59
  4. [Tableau][matrices]changement d'index et variables variables
    Par The Wretched dans le forum Collection et Stream
    Réponses: 4
    Dernier message: 18/04/2005, 10h01
  5. Intercepter le changement de valeur d'une variable
    Par Captain_JS dans le forum C++Builder
    Réponses: 5
    Dernier message: 07/01/2005, 08h04

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