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

Java Discussion :

Reboucler un objet


Sujet :

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 Reboucler un objet
    Bonjour tout le monde,

    J'ai un tableau contenant des prénoms d'un fichier A et j'ai un objet ou je récupère aussi des prénoms d'un fichier B.

    Je fait ceci:
    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
     
    int e=0;
    		    	for (Agent agt : listAgent){
    		    		//System.out.println(e);
    		    		if(agt.getAgent()!=null && agt.getNum_ligne_agent()!=0){
    		    			System.out.println(tab[0][e]+" = "+agt.getAgent());
    		    			System.out.println("");
    		    			if(tab[0][e].equals(agt.getAgent())){//si le prénom du 1er fichier = prénom du 2ème fichier
    		    				//écrire le nombre d'heures dans la colonne de la semaine qu'il a effectué
    		    				row2 = sheet2.getRow(agt.getNum_ligne_agent());//on l'écrit à la ligne de l'agent ds le fichier 'Quimper2..'
    		    				System.out.println("sisi");
    		    				if(tabsemainefichier1[1][e]==1){// si la semaine de l'agent en cours trouvée est = 1
    		    					cell2 = row2.createCell(2);//on l'écrit à la colonne 2 (semaine 51)
    		    					cell2.setCellValue(tabheures[1][e]/24.0);
    		    					cellStyle = wb2.createCellStyle();
    		    					cellStyle.setDataFormat(fmt.getFormat("hh:MM"));
    		    					cell2.setCellStyle(cellStyle);
    		    					System.out.println("on écrit l'heure trouvée "+tabheures[1][e]);
    		    					System.out.println("agent: "+agt.getAgent()+" à la ligne: "+agt.getNum_ligne_agent());
    				    			e++;
    		    				}
    		    			}
    		    		}
    		    	}
    Mais j'ai comme résultat:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    CAMILLE = CAMILLE
    
    sisi
    on écrit l'heure trouvée 10.5
    agent: CAMILLE à la ligne: 2
    MURIELLE = YOHANN
    MURIELLE = MURIELLE
    
    sisi
    on écrit l'heure trouvée 2.5
    agent: MURIELLE à la ligne: 8
    YOHANN = OPHELIE
    ISABELLE = LAURA
    En rouge, on voit qu'une égalité à été omise.
    YOHANN = YOHANN


    En effet, je ne sais pas comment faire dire à l'objet de se remettre à zéro.

    Quelqu'un à une idée ?
    Par avance Merci.

  2. #2
    Membre confirmé Avatar de coshibe
    Homme Profil pro
    Développeur Java
    Inscrit en
    Septembre 2011
    Messages
    183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2011
    Messages : 183
    Par défaut
    Dis moi si je me trompe, mais j'ai l'impression que tu veux parcourir 2 tableauxx et récupérer toutes les lignes qui ont le meme prenom?

    Si c'est le cas il te faut faire un double parcours :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    for(int i = 0; i<maListe1.length(); i++)
    {
       for(int j = 0; j<maListe2.length(); j++)
       {
       if(maListe1.get(i).equals(maListe2.get(i))
     
       }
    }

  3. #3
    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
    Non.
    C'est comparé les valeurs d'un tableaux par rapport a un objet.

    ex:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    int e=0;
    boucle de parcours de l'objet (=for (Agent agt : listAgent){)
    //si le prénom du tableau est égale au prénom dan l'objet
    if(tab[0][e].equals(agt.getAgent())){
    afficher le prénom
    réinitialiser l'objet au départ de la boucle
    }
    e++;//prendre le prochain prénom du tableau
    }

  4. #4
    Membre confirmé Avatar de coshibe
    Homme Profil pro
    Développeur Java
    Inscrit en
    Septembre 2011
    Messages
    183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Java
    Secteur : Service public

    Informations forums :
    Inscription : Septembre 2011
    Messages : 183
    Par défaut
    Je comprends pas.

    tu peux me donner un exemple concret avec 2 listes simples?

  5. #5
    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
    la méthode .get() n'existe pas pour un tableau.

  6. #6
    Modérateur

    Avatar de Robin56
    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    Juin 2009
    Messages
    5 297
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Architecte de système d'information

    Informations forums :
    Inscription : Juin 2009
    Messages : 5 297
    Par défaut
    Citation Envoyé par mouss4rs Voir le message
    la méthode .get() n'existe pas pour un tableau.
    Oui m'enfin entre un tableau avec tab[i] et un get(i) pour une liste, l'équivalence se fait rapidement.
    Responsable Java de Developpez.com (Twitter et Facebook)
    Besoin d'un article/tutoriel/cours sur Java, consulter la page cours
    N'hésitez pas à consulter la FAQ Java et à poser vos questions sur les forums d'entraide Java
    --------
    Architecte Solution
    LinkedIn : https://www.linkedin.com/in/nicolascaudard/

  7. #7
    Membre actif Avatar de dotEden
    Profil pro
    Inscrit en
    Décembre 2011
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 66
    Par défaut
    Bonsoir,

    Je ne comprend pas non plus, si tu réinitialises à chaque fois ta boucle, c'est relancé à l'infini non ?

    Cordialement

  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
    Voilà ce que je fais:
    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
     
    for (int y=0; y<tabPrenomP.length; y++){
    		    		for(int z = 0; z<tabPrenomQ.length; z++){
     
    		    		if(tabPrenomP[0][y]!=null && tabPrenomQ[0][z]!=null){
    		    			System.out.println(tabPrenomP[0][y]+" = "+tabPrenomQ[0][z]);
    		    			System.out.println("");
    		    			if(tabPrenomP[0][y].equals(tabPrenomQ[0][y])){//si le prénom du 1er fichier = prénom du 2ème fichier
    		    				//écrire le nombre d'heures dans la colonne de la semaine qu'il a effectué
    		    				row2 = sheet2.getRow(Integer.parseInt(tabPrenomQ[1][z]));//on l'écrit à la ligne de l'agent ds le fichier 'Quimper2..'
    		    				System.out.println("sisi");
    		    				if(tabsemainefichier1[1][y]==1){// si la semaine de l'agent en cours trouvée est = 1
    		    					cell2 = row2.createCell(2);//on l'écrit à la colonne 2 (semaine 51)
    		    					cell2.setCellValue(tabheures[1][y]/24.0);
    		    					cellStyle = wb2.createCellStyle();
    		    					cellStyle.setDataFormat(fmt.getFormat("hh:MM"));
    		    					cell2.setCellStyle(cellStyle);
    		    					System.out.println("on écrit l'heure trouvée "+tabheures[1][y]);
    		    					System.out.println("agent: "+tabPrenomQ[0][z]+" à la ligne: "+Integer.parseInt(tabPrenomQ[1][z]));
     
     
    		    				}
     
    		    			}
    		    		}
    		    		}
    		    	}
    Sachant que tabPrenomP[0][y] contient:
    MURIELLE, YOHANN, ISABELLE, LAURA
    et que tabPrenomQ[0][z] contient:
    YOHANN, MURIELLE, LAURA, ISABELLE

    Je désire parcourir Ces 2 tableaux pour retrouver les prénoms.
    A chaque fois que je trouve un prénom, j'incrémente tabPrenomP de 1 et je boucle jusqu'a la fin avec tabPrenomQ puis si on trouve rien, on incremente tabPrenomP de 1.
    Et ainsi de suite... pour chaque prenom de tabPrenomP

  9. #9
    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 modéro, jai fait le lien rassure toi.
    dotEden: Non pas à l'infini.
    Je t'invite à lire mon avant dernier post.
    Je me suis mal expliqué.

  10. #10
    Membre actif Avatar de dotEden
    Profil pro
    Inscrit en
    Décembre 2011
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 66
    Par défaut
    Premièrement pour rendre ton code plus propre je te conseille vivement de faire dans tes boucles
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    int nbPrenomsQ = tabPrenomQ.length
    int nbPrenomsP = tabPrenomP.length
     
    for(int i = 0; i < nbPrenomsP; i++) {
        for(int j = 0; j < nbPrenomsQ; i++) {
            ...
        }
    }
    Tu éviteras de rappeller la fonction length à chaque fois.
    De plus, ton
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if(tabPrenomP[0][y]!=null && tabPrenomQ[0][z]!=null){
    		    			System.out.println(tabPrenomP[0][y]+" = "+tabPrenomQ[0][z]);
    		    			System.out.println("");
    		    			if(tabPrenomP[0][y].equals(tabPrenomQ[0][y]))
    peut être factorisé en
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(tabPrenomP[0][y] != null && tabPrenomP[0][y] == tabPrenomQ[0][Z])
    Si tabPrenomQ[0][y] est null est que tabPrenomP[0][y] == tabPrenomQ[0][y]
    alors tabPrenomP[0][y] est null.
    Ainsi ton code aura un niveau d'indentation de moins, un appel à if en moins et un test en moins. En rouge, je pense qu'il s'agit de ton erreur .

    Cordialement

  11. #11
    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, il faut aussi remplacer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    tabPrenomQ.length
    tabPrenomP.length
    Par:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    tabPrenomQ[0].length
    tabPrenomP[0].length
    Ça peut donner quelque chose comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    for (int y=0; y<tabPrenomP[0].length; y++){
      if(tabPrenomP[0][y]==null) {
        continue;
      }
      for(int z = 0; z<tabPrenomQ[0].length; z++){
        if(tabPrenomQ[0][z]==null) {
          continue;
        }
        if(tabPrenomP[0][y].equals(tabPrenomQ[0][z])){//si le prénom du 1er fichier = prénom du 2ème fichier
          //Ton traitement...
          break;
        }
      }
    }

  12. #12
    Membre actif Avatar de dotEden
    Profil pro
    Inscrit en
    Décembre 2011
    Messages
    66
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2011
    Messages : 66
    Par défaut
    Citation Envoyé par Fred_34 Voir le message
    A mon avis, il faut aussi remplacer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    tabPrenomQ.length
    tabPrenomP.length
    Par:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    tabPrenomQ[0].length
    tabPrenomP[0].length
    Ça peut donner quelque chose comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    for (int y=0; y<tabPrenomP[0].length; y++){
      if(tabPrenomP[0][y]==null) {
        continue;
      }
      for(int z = 0; z<tabPrenomQ[0].length; z++){
        if(tabPrenomQ[0][z]==null) {
          continue;
        }
        if(tabPrenomP[0][y].equals(tabPrenomQ[0][z])){//si le prénom du 1er fichier = prénom du 2ème fichier
          //Ton traitement...
          break;
        }
      }
    }
    Approuvé

    Cordialement

Discussions similaires

  1. codage objet
    Par charly dans le forum Algorithmes et structures de données
    Réponses: 18
    Dernier message: 22/08/2002, 16h49
  2. algo : rotation d'objet 3d
    Par numeror dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 19/08/2002, 22h58
  3. Importer des objets de 3dsMax
    Par Anonymous dans le forum OpenGL
    Réponses: 3
    Dernier message: 06/05/2002, 13h53
  4. Peux t'on créer une copie locale de l'objet partagé?
    Par Anonymous dans le forum CORBA
    Réponses: 8
    Dernier message: 16/04/2002, 16h20
  5. [Kylix] Erreur objet
    Par Anonymous dans le forum EDI
    Réponses: 1
    Dernier message: 22/03/2002, 09h41

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